うちのプロジェクトの構成はこんな感じ。
親プロジェクト │ ├ メインリポジトリ (svn) │ └ サブリポジトリ (git) ├ サブプロジェクト1 ├ サブプロジェクト2 └ サブプロジェクト3
ようやく git での開発が始まったので、メインリポジトリ(だった) の svn に加えて git のリポジトリを追加。親プロジェクトにだけリポジトリを登録してサブプロジェクトからもコミットのリンクを貼りたい。記法があるので紐付けられるんだけど、かなり冗長になる。
プロジェクトにリポジトリがある場合
commit:abcdefg
プロジェクトにリポジトリ (git) があるけど、メインリポジトリじゃない場合
commit:git|abdefg
別プロジェクト (parent) にリポジトリ (git) がある場合
parent:commit:git|abcdefg
特に 3 つ目。書けるんだけど、記述が冗長すぎて辛い。
- 親プロジェクトにリポジトリがあるけどサブプロジェクトにはない
- commit だけを指定してサブプロジェクトからリンクを貼りたい
どうするか。とりあえずパーサーをいじる。親プロジェクトの ID が 1 でリポジトリが git の場合。
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6893174..55b2352 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -834,13 +834,8 @@ module ApplicationHelper end when 'commit', 'source', 'export' if project - repository = nil - if name =~ %r{^(([a-z0-9\-_]+)\|)(.+)$} - repo_prefix, repo_identifier, name = $1, $2, $3 - repository = project.repositories.detect {|repo| repo.identifier == repo_identifier} - else - repository = project.repository - end + project = Project.find(1) + repository = project.repositories.detect {|repo| repo.identifier == 'git'} if prefix == 'commit'
これでサブプロジェクトでも
commit:abcdefg
と書けばリンクが貼られるようになる。逆に、プロジェクト名やリポジトリ名を指定すると逆にリンクが貼られなくなる。うちのプロジェクトでは問題なくなるけど、redmine のアップデートの度に修正を当て直すのはめんどくさい。サブプロジェクトの設定に親プロジェクトのリポジトリを引き継ぐ設定があると良いなぁ。