Feature #3346
closedSupport for cross-project revision links
100%
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
Updated by James Wells over 15 years ago
Also attached the diff as a file.
Updated by Babar O'Cap almost 15 years ago
- File cross-project_revision_and_commit_links_v1.diff cross-project_revision_and_commit_links_v1.diff added
Thanks James Wells.
I've updated your patch to be compatible with r2833 and fix some bugs on project name with spaces (eg: r:My Project name:52).
It's also support cross-project commit links (eg: commit:project:a85130f)
Can we merge this patch with the trunk ?
Maybe I'll be updating others Redmine links to support cross-project links.
Updated by Babar O'Cap almost 15 years ago
- File cross-project_revision_and_commit_links_v2.diff cross-project_revision_and_commit_links_v2.diff added
- % Done changed from 0 to 50
Here a bugs and security fix of my patch
Updated by Babar O'Cap almost 15 years ago
Updated by Mischa The Evil almost 15 years ago
Thanks for your patches Babar. It seems a useful feature to me...
Updated by Babar O'Cap almost 15 years ago
- File cross-project_revision_and_commit_links_v3.diff cross-project_revision_and_commit_links_v3.diff added
- % Done changed from 50 to 60
Updated by Babar O'Cap almost 15 years ago
- File cross-project_revision_and_commit_links_v4.diff cross-project_revision_and_commit_links_v4.diff added
- % Done changed from 60 to 70
Updated by Babar O'Cap almost 15 years ago
Know bugs : project name and identifier must have at least 3 characters.
I'll rework the regular expression to avoid this problem.
Updated by Babar O'Cap almost 15 years ago
- File cross-project_revision_and_commit_links_v5.diff cross-project_revision_and_commit_links_v5.diff added
- % Done changed from 70 to 80
New wiki syntax, more intuitive :
project:r52 -> Link to revision 52 of an other project, using project name or identifier
project:commit:a85130f -> Link to scmid starting with a85130f of an other project, using project name or identifier
If your project name contains spaces, use quotation marks :
"My Project":r52
"My Project":commit:a85130f
Now a project name can have at least 1 character.
Updated by James Wells almost 15 years ago
Thanks for all the additional work on this, very much appreciated. Let me know if there is anything I can do to help.
Updated by William Baum almost 15 years ago
James and Babar, that you so much for this.
I really needed cross project source:
and export:
links, and I also wanted alternate link text instead of "source:/whatever/this/that/file.doc" links, so I have extended your project:
syntax to source: and export: links and added the alternate text functionality. I also fixed the source: and export: links so they work properly in email notifications.
I have posted this in Feature #4052.
It seemed enough different to warrant a new Feature, but it's clearly derivative of your work in this issue.
--Bill
Updated by Babar O'Cap about 14 years ago
Balázs Pozsár wrote:
Was this patch merged upstream?
I don't think so, see issues #4052 to have an updated patch.
Updated by Gilles Cornu almost 13 years ago
+1. it would be nice that reference commit keywords (like refs, fixes,...) also supports cross-project/SCM.
Updated by Anthony Topper over 12 years ago
+1. I would love to see this in the next version.
Updated by Jean-Philippe Lang over 12 years ago
- Status changed from New to Closed
- Resolution set to Duplicate
Actually this feature was added in 1.2.0. See #7409.