Merge branch 'zj-branch-contains-git-message' into 'master'
Allow branchnames to be named the same as the commit it points to See merge request gitlab-org/gitlab-ce!17231
This commit is contained in:
commit
e503efa320
3 changed files with 48 additions and 10 deletions
5
changelogs/unreleased/zj-branch-contains-git-message.yml
Normal file
5
changelogs/unreleased/zj-branch-contains-git-message.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Allow branch names to be named the same as the sha it points to
|
||||
merge_request:
|
||||
author:
|
||||
type: fixed
|
|
@ -1355,7 +1355,7 @@ module Gitlab
|
|||
if is_enabled
|
||||
gitaly_ref_client.branch_names_contains_sha(sha)
|
||||
else
|
||||
refs_contains_sha(:branch, sha)
|
||||
refs_contains_sha('refs/heads/', sha)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1365,7 +1365,7 @@ module Gitlab
|
|||
if is_enabled
|
||||
gitaly_ref_client.tag_names_contains_sha(sha)
|
||||
else
|
||||
refs_contains_sha(:tag, sha)
|
||||
refs_contains_sha('refs/tags/', sha)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1464,19 +1464,25 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
def refs_contains_sha(ref_type, sha)
|
||||
args = %W(#{ref_type} --contains #{sha})
|
||||
names = run_git(args).first
|
||||
def refs_contains_sha(refs_prefix, sha)
|
||||
refs_prefix << "/" unless refs_prefix.ends_with?('/')
|
||||
|
||||
return [] unless names.respond_to?(:split)
|
||||
# By forcing the output to %(refname) each line wiht a ref will start with
|
||||
# the ref prefix. All other lines can be discarded.
|
||||
args = %W(for-each-ref --contains=#{sha} --format=%(refname) #{refs_prefix})
|
||||
names, code = run_git(args)
|
||||
|
||||
names = names.split("\n").map(&:strip)
|
||||
return [] unless code.zero?
|
||||
|
||||
names.each do |name|
|
||||
name.slice! '* '
|
||||
refs = []
|
||||
left_slice_count = refs_prefix.length
|
||||
names.lines.each do |line|
|
||||
next unless line.start_with?(refs_prefix)
|
||||
|
||||
refs << line.rstrip[left_slice_count..-1]
|
||||
end
|
||||
|
||||
names
|
||||
refs
|
||||
end
|
||||
|
||||
def rugged_write_config(full_path:)
|
||||
|
|
|
@ -600,6 +600,33 @@ describe Gitlab::Git::Repository, seed_helper: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#branch_names_contains_sha' do
|
||||
shared_examples 'returning the right branches' do
|
||||
let(:head_id) { repository.rugged.head.target.oid }
|
||||
let(:new_branch) { head_id }
|
||||
|
||||
before do
|
||||
repository.create_branch(new_branch, 'master')
|
||||
end
|
||||
|
||||
after do
|
||||
repository.delete_branch(new_branch)
|
||||
end
|
||||
|
||||
it 'displays that branch' do
|
||||
expect(repository.branch_names_contains_sha(head_id)).to include('master', new_branch)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when Gitaly is enabled' do
|
||||
it_behaves_like 'returning the right branches'
|
||||
end
|
||||
|
||||
context 'when Gitaly is disabled', :disable_gitaly do
|
||||
it_behaves_like 'returning the right branches'
|
||||
end
|
||||
end
|
||||
|
||||
describe "#refs_hash" do
|
||||
subject { repository.refs_hash }
|
||||
|
||||
|
|
Loading…
Reference in a new issue