Commit 8e3f2ecf authored by Alejandro Rodríguez's avatar Alejandro Rodríguez

Incorporate RefsService.FindAllBranches Gitaly RPC

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