Skip to content
Snippets Groups Projects
Commit 8e3f2ecf authored by Alejandro Rodríguez's avatar Alejandro Rodríguez
Browse files

Incorporate RefsService.FindAllBranches Gitaly RPC

parent 8065adcc
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -10,7 +10,7 @@ module Gitlab
include Gitlab::EncodingHelper
 
def ref_name(ref)
encode! ref.sub(/\Arefs\/(tags|heads)\//, '')
encode! ref.sub(/\Arefs\/(tags|heads|remotes)\//, '')
end
 
def branch_name(ref)
Loading
Loading
Loading
Loading
@@ -82,10 +82,14 @@ module Gitlab
end
 
# Returns an Array of Branches
#
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/389
def branches(sort_by: nil)
branches_filter(sort_by: sort_by)
def branches
gitaly_migrate(:branches) do |is_enabled|
if is_enabled
gitaly_ref_client.branches
else
branches_filter
end
end
end
 
def reload_rugged
Loading
Loading
Loading
Loading
@@ -10,6 +10,19 @@ module Gitlab
@storage = repository.storage
end
 
def branches
request = Gitaly::FindAllBranchesRequest.new(repository: @gitaly_repo)
response = GitalyClient.call(@storage, :ref_service, :find_all_branches, request)
response.flat_map do |message|
message.branches.map do |branch|
gitaly_commit = GitalyClient::Commit.new(@repository, branch.target)
target_commit = Gitlab::Git::Commit.decorate(gitaly_commit)
Gitlab::Git::Branch.new(@repository, branch.name, branch.target.id, target_commit)
end
end
end
def default_branch_name
request = Gitaly::FindDefaultBranchNameRequest.new(repository: @gitaly_repo)
response = GitalyClient.call(@storage, :ref_service, :find_default_branch_name, request)
Loading
Loading
Loading
Loading
@@ -939,16 +939,21 @@ describe Gitlab::Git::Repository, seed_helper: true do
context 'with deleted branch with Gitaly disabled' do
before do
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).and_return(false)
end
it 'returns no results' do
ref = double()
allow(ref).to receive(:name) { 'bad-branch' }
allow(ref).to receive(:target) { raise Rugged::ReferenceError }
branches = double()
allow(branches).to receive(:each) { [ref].each }
allow(repository.rugged).to receive(:branches) { branches }
end
 
it { is_expected.to eq([]) }
expect(subject).to be_empty
end
end
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RefService, :branches
end
 
describe '#branch_count' do
Loading
Loading
Loading
Loading
@@ -6,6 +6,17 @@ describe Gitlab::GitalyClient::RefService do
let(:relative_path) { project.path_with_namespace + '.git' }
let(:client) { described_class.new(project.repository) }
 
describe '#branches' do
it 'sends a find_all_branches message' do
expect_any_instance_of(Gitaly::RefService::Stub)
.to receive(:find_all_branches)
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
.and_return([])
client.branches
end
end
describe '#branch_names' do
it 'sends a find_all_branch_names message' do
expect_any_instance_of(Gitaly::RefService::Stub)
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