basyura's blog

あしたになったらほんきだす。

redmine で親プロジェクトのリビジョンにリンクをはる

親プロジェクトでリポジトリの設定をしている場合に、子プロジェクトで r100 と書いてもリビジョンへのリンクが貼られない。残念。その場合、parent_project_id:r100 とものすごく冗長な記法が必要になる。つらい。次プロジェクトにリポジトリが無い場合は親をたどればいいのにと思うのだけど、判定のレスポンスにもよるのかなと想像。

とはいえ、めんどくさいし見づらいしなのでパッチをあててみた。親プロジェクトの id が 1 の場合。

  • redmine/app/helpers/application_helper.rb
  def parse_redmine_links(text, default_project, obj, attr, only_path, options)
    text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|document|version|forum|news|message|project|commit|source|export)?(((#)|((([a-z0-9\-_]+)\|)?(r)))((\d+)((#note)?-(\d+))?)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]][^A-Za-z0-9_/])|,|\s|\]|<|$)}) do |m|
      leading, esc, project_prefix, project_identifier, prefix, repo_prefix, repo_identifier, sep, identifier, comment_suffix, comment_id = $1, $2, $3, $4, $5, $10, $11, $8 || $12 || $18, $14 || $19, $15, $17
      link = nil
      project = default_project
      if project_identifier
        project = Project.visible.find_by_identifier(project_identifier)
      end
      if esc.nil?
        if prefix.nil? && sep == 'r'
          if project
            repository = nil
            if repo_identifier
              repository = project.repositories.detect {|repo| repo.identifier == repo_identifier}
+           elsif project.id != 1
+             project = Project.find(1)
+             repository = project.repository
            else
              repository = project.repository
            end

割といいかんじ。