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