Feature #3346
Support for cross-project revision links
| Status: | Closed | Start date: | 2009-05-12 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 100% | |
| Category: | Text formatting | |||
| Target version: | - | |||
| 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
Related issues
History
#2 Updated by Babar O'Cap almost 4 years ago
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.
#3 Updated by Babar O'Cap almost 4 years ago
- File cross-project_revision_and_commit_links_v2.diff
added - % Done changed from 0 to 50
Here a bugs and security fix of my patch
#4 Updated by Babar O'Cap almost 4 years ago
#5 Updated by Mischa The Evil almost 4 years ago
Thanks for your patches Babar. It seems a useful feature to me...
#6 Updated by Babar O'Cap over 3 years ago
- File cross-project_revision_and_commit_links_v3.diff
added - % Done changed from 50 to 60
#7 Updated by Babar O'Cap over 3 years ago
- File cross-project_revision_and_commit_links_v4.diff
added - % Done changed from 60 to 70
#8 Updated by Babar O'Cap over 3 years ago
Know bugs : project name and identifier must have at least 3 characters.
I'll rework the regular expression to avoid this problem.
#9 Updated by Babar O'Cap over 3 years ago
- File 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.
#10 Updated by James Wells over 3 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.
#11 Updated by William Baum over 3 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
#12 Updated by Babar O'Cap over 3 years ago
- % Done changed from 80 to 100
#13 Updated by Balázs Pozsár about 3 years ago
Was this patch merged upstream?
#14 Updated by Babar O'Cap almost 3 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.
#15 Updated by Gilles Cornu over 1 year ago
+1. it would be nice that reference commit keywords (like refs, fixes,...) also supports cross-project/SCM.
#16 Updated by Anthony Topper over 1 year ago
+1. I would love to see this in the next version.
#17 Updated by Jean-Philippe Lang over 1 year ago
- Status changed from New to Closed
- Resolution set to Duplicate
Actually this feature was added in 1.2.0. See #7409.