Commit fe641cbd authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch 'sh-fix-issue-move-api' into 'master'

Fix moving issues API failing when text includes commit URLs

Closes #66666

See merge request gitlab-org/gitlab-ce!32317
parents 96f2b646 29ce13e9
......@@ -35,6 +35,7 @@ class Commit
MIN_SHA_LENGTH = Gitlab::Git::Commit::MIN_SHA_LENGTH
COMMIT_SHA_PATTERN = /\h{#{MIN_SHA_LENGTH},40}/.freeze
EXACT_COMMIT_SHA_PATTERN = /\A#{COMMIT_SHA_PATTERN}\z/.freeze
# Used by GFM to match and present link extensions on node texts and hrefs.
LINK_EXTENSION_PATTERN = /(patch)/.freeze
......@@ -90,7 +91,7 @@ class Commit
end
def valid_hash?(key)
!!(/\A#{COMMIT_SHA_PATTERN}\z/ =~ key)
!!(EXACT_COMMIT_SHA_PATTERN =~ key)
end
def lazy(project, oid)
......@@ -139,6 +140,10 @@ class Commit
'@'
end
def self.reference_valid?(reference)
!!(reference =~ EXACT_COMMIT_SHA_PATTERN)
end
# Pattern used to extract commit references from text
#
# This pattern supports cross-project references.
......
---
title: Fix moving issues API failing when text includes commit URLs
merge_request: 32317
author:
type: fixed
......@@ -102,6 +102,23 @@ describe Gitlab::Gfm::ReferenceRewriter do
end
end
context 'with a commit' do
let(:old_project) { create(:project, :repository, name: 'old-project', group: group) }
let(:commit) { old_project.commit }
context 'reference to an absolute URL to a commit' do
let(:text) { Gitlab::UrlBuilder.build(commit) }
it { is_expected.to eq(text) }
end
context 'reference to a commit' do
let(:text) { commit.id }
it { is_expected.to eq("#{old_project_ref}@#{text}") }
end
end
context 'reference contains project milestone' do
let!(:milestone) do
create(:milestone, title: '9.0', project: old_project)
......
......@@ -192,6 +192,24 @@ describe Commit do
end
end
describe '.reference_valid?' do
using RSpec::Parameterized::TableSyntax
where(:ref, :result) do
'1234567' | true
'123456' | false
'1' | false
'0' * 40 | true
'c1acaa58bbcbc3eafe538cb8274ba387047b69f8' | true
'H1acaa58bbcbc3eafe538cb8274ba387047b69f8' | false
nil | false
end
with_them do
it { expect(described_class.reference_valid?(ref)).to eq(result) }
end
end
describe '#reference_link_text' do
let(:project) { create(:project, :repository, path: 'sample-project') }
......
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