Redmineとgitoliteの連携その2

その1はめちゃくちゃなので非公開にしています…。

連携についての作業を書いておく。毎回忘れて、historyとgrepとlessを多用することになるので。

想定する状況は、新しくレポジトリを作って、Redmineで反映させたいときです。

1. ローカルマシンで、新しくレポジトリを作ってcommit

2. Redmineとgitoliteが入っているリモートマシンにログイン

3. リモートマシンの、/var/lib/redmine/repositories/にて、

git clone --mirror /home/gitolite-user/repositories/hogehoge.git
とする。

4. 次に、su gitolite-userして、/home/gitolite-user/repositories/hogehoge.git/hooks/にて、
vi post-receive
として、
#!/bin/sh
/usr/bin/git push --mirror /var/lib/redmine/repositories/hogehoge.git
と書いて、実行権限を付加。
chmod 700 post-receive

5. RedmineにWebログインして、新しくプロジェクトを作り、レポジトリに、/var/lib/redmine/repositories/hogehoge.git を割り当てる

以上。Redmineで確認してみる。って感じかと。

Redmineのファイルの項目で、コメントを表示する

環境:

$ cat /etc/redhat-release 
CentOS release 6.3 (Final)

$ rails -v
Rails 3.2.8

$ ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

$ cat /var/lib/redmine/lib/redmine/version.rb 
require 'rexml/document'

module Redmine
  module VERSION #:nodoc:
    MAJOR = 2
    MINOR = 1
    TINY  = 2

# => Redmine 2.1.2 stable

Redmineは便利なことにファイルのやりとりに使える。HTTPSで運用すればそれなりにセキュアだしお手軽である。

さっそく使ってみた。

だけどアップロードの際にコメント欄が存在するにも関わらず、アップロードしてから見てみるとコメントが表示されない。リンクの上にマウスポインタを載せると数秒して表示されるけれどもUI的にゴミクズ。最初から表示汁。

Redmineがどういう構造になっているのかまったく知らないので、プラグインを入れるのが楽だろうと思ってあれこれ探ってみたがソースをいじる他ないようである。

端的に言えば、
vi /var/lib/redmineapp/views/files/index.html.erb

として、↓の2行を追加である。
<%= sort_header_tag('description', :caption => l(:field_description)) %>
と
<%= file.description %>

具体的な場所は、↓。
index.html.erb
<div class="contextual">
<%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
</div>

<h2><%=l(:label_attachment_plural)%></h2>

<% delete_allowed = User.current.allowed_to?(:manage_files, @project) %>

<table class="list files">
  <thead><tr>
    <%= sort_header_tag('filename', :caption => l(:field_filename)) %>

	<%= sort_header_tag('description', :caption => l(:field_description)) %>
	<!-- ↑この行を追加! -->

    <%= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc') %>
    <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc') %>
    <%= sort_header_tag('downloads', :caption => l(:label_downloads_abbr), :default_order => 'desc') %>
    <th>MD5</th>
    <th></th>
  </tr></thead>
  <tbody>
<% @containers.each do |container| %>
  <% next if container.attachments.empty? -%>
  <% if container.is_a?(Version) -%>
  <tr>
    <th colspan="6" align="left">
      <%= link_to(h(container), {:controller => 'versions', :action => 'show', :id => container}, :class => "icon icon-package") %>
    </th>
  </tr>
  <% end -%>
  <% container.attachments.each do |file| %>
  <tr class="file <%= cycle("odd", "even") %>">
    <td class="filename"><%= link_to_attachment file, :download => true, :title => file.description %></td>

    <td class="description"><%= file.description %></td>
	<!-- ↑この行を追加! -->

	<td class="created_on"><%= format_time(file.created_on) %></td>
    <td class="filesize"><%= number_to_human_size(file.filesize) %></td>
    <td class="downloads"><%= file.downloads %></td>
    <td class="digest"><%= file.digest %></td>
    <td align="center">
    <%= link_to(image_tag('delete.png'), attachment_path(file),
                                         :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %>
    </td>
  </tr>
  <% end
  reset_cycle %>
<% end %>
  </tbody>
</table>

<% html_title(l(:label_attachment_plural)) -%>

そして、httpdの再起動。
service httpd restart

こんな感じになりました↓