というのは意外とあったりすると思います。

例えば下記のような場合です。

  • クライアント側・サーバ側でリポジトリは分けているが課題としては同じプロジェクトの同じチケットで管理したい
  • 複数バージョン管理していて、リポジトリが分かれているが両バージョンに適用しないといけない課題で同じプロジェクトの同じチケットで管理したい

しかし、それぞれ専用のプロジェクトを立てるというのはちょっと大袈裟ですし、1プロジェクトに集約したいし、チケットは1チケットで完結させたい。というケースはあったりすると思います。

実際に前職でこういうことがありましたし、現職でもこういうことになりそうです。ですが、Redmineではおそらくこれを想定していないのか、1プロジェクトに複数のリポジトリを紐づけして、なおかつ、あるチケットに複数のリポジトリのとあるコミットが紐づいている場合に判別するすべがありません。関連するリビジョンにどのリポジトリのコミットか表示されないからです。

今回はこれを解決してみたいと思います。

本体のコードに変更を加える


これをやるには本体のソースコードに変更を加える必要があります。もしかしたら、プラグインでもできるかもしれませんが、私はプラグインの作成方法を知らないので本体のソースコードに変更を加えました。

モデルの変更

まず/app/models/changeset.rbを変更します。適当な場所に下記のメソッドを追加します。

1
2
3
def repository_name 
repository.name
end

ビューの変更

次にビューのapp/views/issues/_changesets.html.erbに変更を加えます。3行目くらいに<p><b><%= textilizable(changeset, :repository_name) %></b></p>を追加します。

1
2
3
4
<% changesets.each do |changeset| %>
<div class="changeset <%= cycle('odd', 'even') %>">
<p><b><%= textilizable(changeset, :repository_name) %></b></p> ←この行を足す
<p><%= link_to_revision(changeset, changeset.repository,

結果


このような感じで、とあるプロジェクトに複数のリポジトリが紐づけられているとします。

それぞれのリポジトリのとあるコミットでチケット#1への参照があるとしましょう。その場合にチケットNo1の「関連しているリビジョン」に下記のようにリポジトリの識別子が表示されるようになります。

「関連しているリビジョン」はコミットされた時間順で表示されるのでリポジトリ順に表示したいとなれば、もう少し変更が必要になりますが、とりあえず、前述の変更で「関連するリビジョン」にリポジトリの識別子は表示できるようになります。

つ~か、これ、本体にパッチ送ってみてもいいのではないかという気がしてきました。気が向いたらIssueで起票してみたいと思います。