summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-12-01 12:58:45 +0100
committerDouwe Maan <douwe@gitlab.com>2015-12-01 12:58:45 +0100
commit62c14ba2edf9ac4b4bb1e8c46c0c60f1b6574909 (patch)
tree09df506c6905a490613a6fd31edc8004b3c15495
parentbd4ab21c07061e06166b08d86157e4004665ccbc (diff)
downloadgitlab-ce-62c14ba2edf9ac4b4bb1e8c46c0c60f1b6574909.tar.gz
Render commit reference using short sha, but include full sha in comment.
-rw-r--r--app/models/commit.rb8
-rw-r--r--app/models/commit_range.rb8
-rw-r--r--app/models/concerns/referable.rb4
-rw-r--r--lib/gitlab/markdown/abstract_reference_filter.rb2
-rw-r--r--spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb6
-rw-r--r--spec/lib/gitlab/markdown/commit_reference_filter_spec.rb2
-rw-r--r--spec/models/commit_range_spec.rb22
-rw-r--r--spec/models/commit_spec.rb17
8 files changed, 58 insertions, 11 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
index fc03d2580d7..a5d041a49c8 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -87,6 +87,14 @@ class Commit
def to_reference(from_project = nil)
if cross_project_reference?(from_project)
+ project.to_reference + self.class.reference_prefix + self.id
+ else
+ self.id
+ end
+ end
+
+ def reference_link_text(from_project = nil)
+ if cross_project_reference?(from_project)
project.to_reference + self.class.reference_prefix + self.short_id
else
self.short_id
diff --git a/app/models/commit_range.rb b/app/models/commit_range.rb
index 449689faf65..f786a749b8e 100644
--- a/app/models/commit_range.rb
+++ b/app/models/commit_range.rb
@@ -95,6 +95,14 @@ class CommitRange
alias_method :id, :to_s
def to_reference(from_project = nil)
+ if cross_project_reference?(from_project)
+ reference = project.to_reference + self.class.reference_prefix + self.id
+ else
+ self.id
+ end
+ end
+
+ def reference_link_text(from_project = nil)
reference = ref_from + notation + ref_to
if cross_project_reference?(from_project)
diff --git a/app/models/concerns/referable.rb b/app/models/concerns/referable.rb
index 16e4d054869..ce064f675ae 100644
--- a/app/models/concerns/referable.rb
+++ b/app/models/concerns/referable.rb
@@ -21,6 +21,10 @@ module Referable
''
end
+ def reference_link_text(from_project = nil)
+ to_reference(from_project)
+ end
+
module ClassMethods
# The character that prefixes the actual reference identifier
#
diff --git a/lib/gitlab/markdown/abstract_reference_filter.rb b/lib/gitlab/markdown/abstract_reference_filter.rb
index 02a9e05a699..f6df9518fc6 100644
--- a/lib/gitlab/markdown/abstract_reference_filter.rb
+++ b/lib/gitlab/markdown/abstract_reference_filter.rb
@@ -82,7 +82,7 @@ module Gitlab
data = data_attribute(project: project.id, object_sym => object.id, original: match)
url = matches[:url] || url_for_object(object, project)
- text = object.to_reference(context[:project])
+ text = object.reference_link_text(context[:project])
extras = object_link_text_extras(object, matches)
text += " (#{extras.join(", ")})" if extras.any?
diff --git a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
index 4b4c769a110..f65a3e8a0bd 100644
--- a/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_range_reference_filter_spec.rb
@@ -53,7 +53,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do
doc = filter("See (#{reference}.)")
- exp = Regexp.escape(range.to_reference)
+ exp = Regexp.escape(range.reference_link_text)
expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end
@@ -125,7 +125,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)")
- exp = Regexp.escape("#{project2.to_reference}@#{range.to_reference}")
+ exp = Regexp.escape("#{project2.to_reference}@#{range.reference_link_text}")
expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end
@@ -163,7 +163,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)")
- exp = Regexp.escape(range.to_reference(project))
+ exp = Regexp.escape(range.reference_link_text(project))
expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end
diff --git a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
index a8c9c7efd56..4cc6bbbfe94 100644
--- a/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/commit_reference_filter_spec.rb
@@ -148,7 +148,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)")
- expect(doc.to_html).to match(/\(<a.+>#{commit.to_reference(project)}<\/a>\.\)/)
+ expect(doc.to_html).to match(/\(<a.+>#{commit.reference_link_text(project)}<\/a>\.\)/)
end
it 'ignores invalid commit IDs on the referenced project' do
diff --git a/spec/models/commit_range_spec.rb b/spec/models/commit_range_spec.rb
index 58283f06972..3c1009a2eb0 100644
--- a/spec/models/commit_range_spec.rb
+++ b/spec/models/commit_range_spec.rb
@@ -38,15 +38,31 @@ describe CommitRange do
let(:cross) { create(:project) }
it 'returns a String reference to the object' do
- expect(range.to_reference).to eq "#{sha_from}...#{sha_to}"
+ expect(range.to_reference).to eq "#{full_sha_from}...#{full_sha_to}"
end
it 'returns a String reference to the object' do
- expect(range2.to_reference).to eq "#{sha_from}..#{sha_to}"
+ expect(range2.to_reference).to eq "#{full_sha_from}..#{full_sha_to}"
end
it 'supports a cross-project reference' do
- expect(range.to_reference(cross)).to eq "#{project.to_reference}@#{sha_from}...#{sha_to}"
+ expect(range.to_reference(cross)).to eq "#{project.to_reference}@#{full_sha_from}...#{full_sha_to}"
+ end
+ end
+
+ describe '#reference_link_text' do
+ let(:cross) { create(:project) }
+
+ it 'returns a String reference to the object' do
+ expect(range.reference_link_text).to eq "#{sha_from}...#{sha_to}"
+ end
+
+ it 'returns a String reference to the object' do
+ expect(range2.reference_link_text).to eq "#{sha_from}..#{sha_to}"
+ end
+
+ it 'supports a cross-project reference' do
+ expect(range.reference_link_text(cross)).to eq "#{project.to_reference}@#{sha_from}...#{sha_to}"
end
end
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb
index 1aaa927c216..974b52c1833 100644
--- a/spec/models/commit_spec.rb
+++ b/spec/models/commit_spec.rb
@@ -15,12 +15,23 @@ describe Commit do
describe '#to_reference' do
it 'returns a String reference to the object' do
- expect(commit.to_reference).to eq commit.short_id
+ expect(commit.to_reference).to eq commit.id
end
it 'supports a cross-project reference' do
cross = double('project')
- expect(commit.to_reference(cross)).to eq "#{project.to_reference}@#{commit.short_id}"
+ expect(commit.to_reference(cross)).to eq "#{project.to_reference}@#{commit.id}"
+ end
+ end
+
+ describe '#reference_link_text' do
+ it 'returns a String reference to the object' do
+ expect(commit.reference_link_text).to eq commit.short_id
+ end
+
+ it 'supports a cross-project reference' do
+ cross = double('project')
+ expect(commit.reference_link_text(cross)).to eq "#{project.to_reference}@#{commit.short_id}"
end
end
@@ -88,7 +99,7 @@ eos
subject { create(:project).commit }
let(:author) { create(:user, email: subject.author_email) }
- let(:backref_text) { "commit #{subject.short_id}" }
+ let(:backref_text) { "commit #{subject.id}" }
let(:set_mentionable_text) do
->(txt) { allow(subject).to receive(:safe_message).and_return(txt) }
end