Actions
Feature #3346
closedSupport for cross-project revision links
Status:
Closed
Priority:
Normal
Assignee:
-
Category:
Text formatting
Target version:
-
Start date:
2009-05-12
Due date:
% Done:
100%
Estimated time:
Resolution:
Duplicate
Description
It may sometimes be useful to be able to reference a specific repository revision in one project from another project, for example if an issue is partially addressed by a change in a sub-project. Whereas a revision link can be done with !r1234
, a cross-project link could be done with r:project:1234
.
The following patch shows how this could be done with relatively little change (although I haven't done much testing as to whether or not it breaks any other linking):
Index: app/helpers/application_helper.rb =================================================================== --- app/helpers/application_helper.rb (revision 2717) +++ app/helpers/application_helper.rb (working copy) @@ -385,15 +385,25 @@ # export:some/file -> Force the download of the file # Forum messages: # message#1218 -> Link to message with id 1218 - text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|\s|<|$)}) do |m| - leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8 + text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\:[^\:\s]+\:)?(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|\s|<|$)}) do |m| + leading, esc, prefix, sep, revproj, oid = $1, $2, $3, $5 || $8, $6, $7 || $9 link = nil if esc.nil? if prefix.nil? && sep == 'r' - if project && (changeset = project.changesets.find_by_revision(oid)) - link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid}, + if revproj.nil? + if project && (changeset = project.changesets.find_by_revision(oid)) + link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid}, + :class => 'changeset', + :title => truncate_single_line(changeset.comments, 100)) + end + else + revproj.gsub!(/\:/,'') + link_project = Project.find_by_name(revproj) || Project.find_by_identifier(revproj) + if link_project && (changeset = link_project.changesets.find_by_revision(oid)) + link = link_to("r:#{revproj}:#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => link_project, :rev => oid}, :class => 'changeset', :title => truncate_single_line(changeset.comments, 100)) + end end elsif sep == '#' oid = oid.to_i
Files
Related issues
Actions