Skip to content
Snippets Groups Projects
Commit b54515de authored by Grzegorz Bizon's avatar Grzegorz Bizon Committed by 🤖 GitLab Bot 🤖
Browse files

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

(cherry picked from commit fe641cbd)

29ce13e9 Fix moving issues API failing when text includes commit URLs
parent 6ada08b1
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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)
Loading
Loading
@@ -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.
Loading
Loading
---
title: Fix moving issues API failing when text includes commit URLs
merge_request: 32317
author:
type: fixed
Loading
Loading
@@ -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)
Loading
Loading
Loading
Loading
@@ -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') }
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment