Default branch detection happens through Gitaly
Migration: https://gitlab.com/gitlab-org/gitaly/issues/220
This commit is contained in:
parent
f195a7436d
commit
4fc4600747
2 changed files with 5 additions and 83 deletions
|
@ -120,13 +120,11 @@ module Gitlab
|
|||
|
||||
# Default branch in the repository
|
||||
def root_ref
|
||||
@root_ref ||= gitaly_migrate(:root_ref, status: Gitlab::GitalyClient::MigrationStatus::OPT_OUT) do |is_enabled|
|
||||
if is_enabled
|
||||
gitaly_ref_client.default_branch_name
|
||||
else
|
||||
discover_default_branch
|
||||
end
|
||||
end
|
||||
gitaly_ref_client.default_branch_name
|
||||
rescue GRPC::NotFound => e
|
||||
raise NoRepository.new(e.message)
|
||||
rescue GRPC::Unknown => e
|
||||
raise Gitlab::Git::CommandError.new(e.message)
|
||||
end
|
||||
|
||||
def rugged
|
||||
|
@ -364,31 +362,6 @@ module Gitlab
|
|||
end.map(&:name)
|
||||
end
|
||||
|
||||
# Discovers the default branch based on the repository's available branches
|
||||
#
|
||||
# - If no branches are present, returns nil
|
||||
# - If one branch is present, returns its name
|
||||
# - If two or more branches are present, returns current HEAD or master or first branch
|
||||
def discover_default_branch
|
||||
names = branch_names
|
||||
|
||||
return if names.empty?
|
||||
|
||||
return names[0] if names.length == 1
|
||||
|
||||
if rugged_head
|
||||
extracted_name = Ref.extract_branch_name(rugged_head.name)
|
||||
|
||||
return extracted_name if names.include?(extracted_name)
|
||||
end
|
||||
|
||||
if names.include?('master')
|
||||
'master'
|
||||
else
|
||||
names[0]
|
||||
end
|
||||
end
|
||||
|
||||
def rugged_head
|
||||
rugged.head
|
||||
rescue Rugged::ReferenceError
|
||||
|
|
|
@ -77,17 +77,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
|
|||
end
|
||||
|
||||
describe '#root_ref' do
|
||||
context 'with gitaly disabled' do
|
||||
before do
|
||||
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).and_return(false)
|
||||
end
|
||||
|
||||
it 'calls #discover_default_branch' do
|
||||
expect(repository).to receive(:discover_default_branch)
|
||||
repository.root_ref
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns UTF-8' do
|
||||
expect(repository.root_ref).to be_utf8
|
||||
end
|
||||
|
@ -153,46 +142,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe "#discover_default_branch" do
|
||||
let(:master) { 'master' }
|
||||
let(:feature) { 'feature' }
|
||||
let(:feature2) { 'feature2' }
|
||||
|
||||
around do |example|
|
||||
# discover_default_branch will be moved to gitaly-ruby
|
||||
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
|
||||
example.run
|
||||
end
|
||||
end
|
||||
|
||||
it "returns 'master' when master exists" do
|
||||
expect(repository).to receive(:branch_names).at_least(:once).and_return([feature, master])
|
||||
expect(repository.discover_default_branch).to eq('master')
|
||||
end
|
||||
|
||||
it "returns non-master when master exists but default branch is set to something else" do
|
||||
File.write(File.join(repository_path, 'HEAD'), 'ref: refs/heads/feature')
|
||||
expect(repository).to receive(:branch_names).at_least(:once).and_return([feature, master])
|
||||
expect(repository.discover_default_branch).to eq('feature')
|
||||
File.write(File.join(repository_path, 'HEAD'), 'ref: refs/heads/master')
|
||||
end
|
||||
|
||||
it "returns a non-master branch when only one exists" do
|
||||
expect(repository).to receive(:branch_names).at_least(:once).and_return([feature])
|
||||
expect(repository.discover_default_branch).to eq('feature')
|
||||
end
|
||||
|
||||
it "returns a non-master branch when more than one exists and master does not" do
|
||||
expect(repository).to receive(:branch_names).at_least(:once).and_return([feature, feature2])
|
||||
expect(repository.discover_default_branch).to eq('feature')
|
||||
end
|
||||
|
||||
it "returns nil when no branch exists" do
|
||||
expect(repository).to receive(:branch_names).at_least(:once).and_return([])
|
||||
expect(repository.discover_default_branch).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe '#branch_names' do
|
||||
subject { repository.branch_names }
|
||||
|
||||
|
|
Loading…
Reference in a new issue