Commit e503efa3 authored by Douwe Maan's avatar Douwe Maan

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
parents 6ad7eceb e70fe782
Pipeline #17891324 failed with stages
in 36 minutes and 58 seconds
---
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 }
......
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