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

Incorporate Gitaly's RemoteService.UpdateRemoteMirror RPC

parent 7fa0a3e7
No related branches found
No related tags found
No related merge requests found
0.70.0
0.72.0
Loading
Loading
@@ -6,7 +6,23 @@ module Gitlab
@ref_name = ref_name
end
 
def update(only_branches_matching: [], only_tags_matching: [])
def update(only_branches_matching: [])
@repository.gitaly_migrate(:remote_update_remote_mirror) do |is_enabled|
if is_enabled
gitaly_update(only_branches_matching)
else
rugged_update(only_branches_matching)
end
end
end
private
def gitaly_update(only_branches_matching)
@repository.gitaly_remote_client.update_remote_mirror(@ref_name, only_branches_matching)
end
def rugged_update(only_branches_matching)
local_branches = refs_obj(@repository.local_branches, only_refs_matching: only_branches_matching)
remote_branches = refs_obj(@repository.remote_branches(@ref_name), only_refs_matching: only_branches_matching)
 
Loading
Loading
@@ -15,8 +31,8 @@ module Gitlab
 
delete_refs(local_branches, remote_branches)
 
local_tags = refs_obj(@repository.tags, only_refs_matching: only_tags_matching)
remote_tags = refs_obj(@repository.remote_tags(@ref_name), only_refs_matching: only_tags_matching)
local_tags = refs_obj(@repository.tags)
remote_tags = refs_obj(@repository.remote_tags(@ref_name))
 
updated_tags = changed_refs(local_tags, remote_tags)
@repository.push_remote_branches(@ref_name, updated_tags.keys) if updated_tags.present?
Loading
Loading
@@ -24,8 +40,6 @@ module Gitlab
delete_refs(local_tags, remote_tags)
end
 
private
def refs_obj(refs, only_refs_matching: [])
refs.each_with_object({}) do |ref, refs|
next if only_refs_matching.present? && !only_refs_matching.include?(ref.name)
Loading
Loading
module Gitlab
module GitalyClient
class RemoteService
MAX_MSG_SIZE = 128.kilobytes.freeze
def initialize(repository)
@repository = repository
@gitaly_repo = repository.gitaly_repository
Loading
Loading
@@ -38,6 +40,31 @@ module Gitlab
 
response.result
end
def update_remote_mirror(ref_name, only_branches_matching)
req_enum = Enumerator.new do |y|
y.yield Gitaly::UpdateRemoteMirrorRequest.new(
repository: @gitaly_repo,
ref_name: ref_name
)
current_size = 0
slices = only_branches_matching.slice_before do |branch_name|
current_size += branch_name.bytesize
next false if current_size < MAX_MSG_SIZE
current_size = 0
end
slices.each do |slice|
y.yield Gitaly::UpdateRemoteMirrorRequest.new(only_branches_matching: slice)
end
end
GitalyClient.call(@storage, :remote_service, :update_remote_mirror, req_enum)
end
end
end
end
Loading
Loading
@@ -44,4 +44,18 @@ describe Gitlab::GitalyClient::RemoteService do
expect(client.fetch_internal_remote(remote_repository)).to be(true)
end
end
describe '#update_remote_mirror' do
let(:ref_name) { 'remote_mirror_1' }
let(:only_branches_matching) { ['my-branch', 'master'] }
it 'sends an update_remote_mirror message' do
expect_any_instance_of(Gitaly::RemoteService::Stub)
.to receive(:update_remote_mirror)
.with(kind_of(Enumerator), kind_of(Hash))
.and_return(double(:update_remote_mirror_response))
client.update_remote_mirror(ref_name, only_branches_matching)
end
end
end
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