diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb
index a18db9df73e..559508d900f 100644
--- a/app/helpers/commits_helper.rb
+++ b/app/helpers/commits_helper.rb
@@ -20,26 +20,27 @@ module CommitsHelper
def more_commits_link
offset = params[:offset] || 0
limit = params[:limit] || 100
- link_to "More", project_commits_path(@project, :offset => offset.to_i + limit.to_i, :limit => limit),
+ link_to "More", project_commits_path(project, :offset => offset.to_i + limit.to_i, :limit => limit),
:remote => true, :class => "lite_button vm", :style => "text-align:center; width:930px; ", :id => "more-commits-link"
end
- def commit_msg_with_link_to_issues
- out = ""
- @commit.safe_message.split(/(#[0-9]+)/m).each do |m|
+ def commit_msg_with_link_to_issues(project, message)
+ return '' unless message
+ out = ''
+ message.split(/(#[0-9]+)/m).each do |m|
if m =~ /(#([0-9]+))/m
begin
issue = Issue.find($2)
- raise Exception('Issue not belonging to current project, not creating link !') unless issue.project_id == @project.id
- out+=link_to($1, project_issue_path(@project, $2))
+ raise Exception('Issue not belonging to current project, not creating link !') unless issue.project_id == project.id
+ out += link_to($1, project_issue_path(project, $2))
rescue
- out+=$1
+ out += $1
end
else
- out+= m
+ out += m
end
end
- out
+ preserve out
end
end
diff --git a/app/views/commits/show.html.haml b/app/views/commits/show.html.haml
index 2a6b85bf0fe..44b7b8fa293 100644
--- a/app/views/commits/show.html.haml
+++ b/app/views/commits/show.html.haml
@@ -18,7 +18,7 @@
%hr
%pre.commit_message
- = preserve commit_msg_with_link_to_issues
+ = commit_msg_with_link_to_issues(@project, @commit.safe_message)
.clear
%br
diff --git a/spec/helpers/commit_helper_spec.rb b/spec/helpers/commit_helper_spec.rb
new file mode 100644
index 00000000000..747a28a35b9
--- /dev/null
+++ b/spec/helpers/commit_helper_spec.rb
@@ -0,0 +1,67 @@
+require "spec_helper"
+include Haml::Helpers
+
+describe CommitsHelper do
+
+ before do
+ @project = Factory :project
+ @other_project = Factory :project, :path => "OtherPath", :code => "OtherCode"
+ @fake_user = Factory :user
+ @valid_issue = Factory :issue, :assignee => @fake_user, :author => @fake_user, :project => @project
+ @invalid_issue = Factory :issue, :assignee => @fake_user, :author => @fake_user, :project => @other_project
+ end
+
+ it "should provides return message untouched if no issue number present" do
+ message = "Dummy message without issue number"
+
+ commit_msg_with_link_to_issues(@project, message).should eql message
+ end
+
+ it "should returns message handled by preserve" do
+ message = "My brand new
+ Commit on multiple
+ lines !"
+
+ #\n are converted to
as specified in preserve_rspec
+ expected = "My brand new
Commit on multiple
lines !"
+
+ commit_msg_with_link_to_issues(@project, message).should eql expected
+ end
+
+ it "should returns empty string if message undefined" do
+ commit_msg_with_link_to_issues(@project, nil).should eql ''
+ end
+
+ it "should returns link_to issue for one valid issue in message" do
+ issue_id = @valid_issue.id
+ message = "One commit message ##{issue_id}"
+ expected = "One commit message ##{issue_id}"
+
+ commit_msg_with_link_to_issues(@project, message).should eql expected
+ end
+
+ it "should returns message untouched for one invalid issue in message" do
+ issue_id = @invalid_issue.id
+ message = "One commit message ##{issue_id}"
+
+ commit_msg_with_link_to_issues(@project, message).should eql message
+ end
+
+ it "should handle multiple issue references in commit message" do
+ issue_id = @valid_issue.id
+ invalid_issue_id = @invalid_issue.id
+
+ message = "One big commit message with a valid issue ##{issue_id} and an invalid one ##{invalid_issue_id}.
+ We reference valid ##{issue_id} multiple times (##{issue_id}) as the invalid ##{invalid_issue_id} is also
+ referenced another time (##{invalid_issue_id})"
+
+ expected = "One big commit message with a valid issue ##{issue_id}"+
+ " and an invalid one ##{invalid_issue_id}.
"+
+ "We reference valid ##{issue_id} multiple times "+
+ "(##{issue_id}) "+
+ "as the invalid ##{invalid_issue_id} is also
referenced another time (##{invalid_issue_id})"
+
+ commit_msg_with_link_to_issues(@project, message).should eql expected
+ end
+
+end
\ No newline at end of file