Commit 62c14ba2 authored by Douwe Maan's avatar Douwe Maan

Render commit reference using short sha, but include full sha in comment.

parent bd4ab21c
...@@ -86,6 +86,14 @@ class Commit ...@@ -86,6 +86,14 @@ class Commit
end end
def to_reference(from_project = nil) 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) if cross_project_reference?(from_project)
project.to_reference + self.class.reference_prefix + self.short_id project.to_reference + self.class.reference_prefix + self.short_id
else else
......
...@@ -95,6 +95,14 @@ class CommitRange ...@@ -95,6 +95,14 @@ class CommitRange
alias_method :id, :to_s alias_method :id, :to_s
def to_reference(from_project = nil) 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 reference = ref_from + notation + ref_to
if cross_project_reference?(from_project) if cross_project_reference?(from_project)
......
...@@ -21,6 +21,10 @@ module Referable ...@@ -21,6 +21,10 @@ module Referable
'' ''
end end
def reference_link_text(from_project = nil)
to_reference(from_project)
end
module ClassMethods module ClassMethods
# The character that prefixes the actual reference identifier # The character that prefixes the actual reference identifier
# #
......
...@@ -82,7 +82,7 @@ module Gitlab ...@@ -82,7 +82,7 @@ module Gitlab
data = data_attribute(project: project.id, object_sym => object.id, original: match) data = data_attribute(project: project.id, object_sym => object.id, original: match)
url = matches[:url] || url_for_object(object, project) 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) extras = object_link_text_extras(object, matches)
text += " (#{extras.join(", ")})" if extras.any? text += " (#{extras.join(", ")})" if extras.any?
......
...@@ -53,7 +53,7 @@ module Gitlab::Markdown ...@@ -53,7 +53,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do it 'links with adjacent text' do
doc = filter("See (#{reference}.)") 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>\.\)/) expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end end
...@@ -125,7 +125,7 @@ module Gitlab::Markdown ...@@ -125,7 +125,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)") 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>\.\)/) expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end end
...@@ -163,7 +163,7 @@ module Gitlab::Markdown ...@@ -163,7 +163,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)") 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>\.\)/) expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
end end
......
...@@ -148,7 +148,7 @@ module Gitlab::Markdown ...@@ -148,7 +148,7 @@ module Gitlab::Markdown
it 'links with adjacent text' do it 'links with adjacent text' do
doc = filter("Fixed (#{reference}.)") 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 end
it 'ignores invalid commit IDs on the referenced project' do it 'ignores invalid commit IDs on the referenced project' do
......
...@@ -38,15 +38,31 @@ describe CommitRange do ...@@ -38,15 +38,31 @@ describe CommitRange do
let(:cross) { create(:project) } let(:cross) { create(:project) }
it 'returns a String reference to the object' do 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 end
it 'returns a String reference to the object' do 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 end
it 'supports a cross-project reference' do 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
end end
......
...@@ -15,12 +15,23 @@ describe Commit do ...@@ -15,12 +15,23 @@ describe Commit do
describe '#to_reference' do describe '#to_reference' do
it 'returns a String reference to the object' 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 end
it 'supports a cross-project reference' do it 'supports a cross-project reference' do
cross = double('project') 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
end end
...@@ -88,7 +99,7 @@ eos ...@@ -88,7 +99,7 @@ eos
subject { create(:project).commit } subject { create(:project).commit }
let(:author) { create(:user, email: subject.author_email) } 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 let(:set_mentionable_text) do
->(txt) { allow(subject).to receive(:safe_message).and_return(txt) } ->(txt) { allow(subject).to receive(:safe_message).and_return(txt) }
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment