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
---
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 ...@@ -1355,7 +1355,7 @@ module Gitlab
if is_enabled if is_enabled
gitaly_ref_client.branch_names_contains_sha(sha) gitaly_ref_client.branch_names_contains_sha(sha)
else else
refs_contains_sha(:branch, sha) refs_contains_sha('refs/heads/', sha)
end end
end end
end end
...@@ -1365,7 +1365,7 @@ module Gitlab ...@@ -1365,7 +1365,7 @@ module Gitlab
if is_enabled if is_enabled
gitaly_ref_client.tag_names_contains_sha(sha) gitaly_ref_client.tag_names_contains_sha(sha)
else else
refs_contains_sha(:tag, sha) refs_contains_sha('refs/tags/', sha)
end end
end end
end end
...@@ -1464,19 +1464,25 @@ module Gitlab ...@@ -1464,19 +1464,25 @@ module Gitlab
end end
end end
def refs_contains_sha(ref_type, sha) def refs_contains_sha(refs_prefix, sha)
args = %W(#{ref_type} --contains #{sha}) refs_prefix << "/" unless refs_prefix.ends_with?('/')
names = run_git(args).first
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| refs = []
name.slice! '* ' 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 end
names refs
end end
def rugged_write_config(full_path:) def rugged_write_config(full_path:)
......
...@@ -600,6 +600,33 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -600,6 +600,33 @@ describe Gitlab::Git::Repository, seed_helper: true do
end end
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 describe "#refs_hash" do
subject { repository.refs_hash } 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