diff options
author | Alejandro RodrÃguez <alejorro70@gmail.com> | 2018-01-17 20:25:16 -0300 |
---|---|---|
committer | Alejandro RodrÃguez <alejorro70@gmail.com> | 2018-01-22 13:51:02 -0300 |
commit | d86751d842f9547af0b7db17eacb89e940a106f7 (patch) | |
tree | 7bec074baf4bfa3c5091060df10bae375395288f /lib/gitlab/gitaly_client | |
parent | 7fa0a3e7775703ad9e53216f6154a773ca17ad4a (diff) | |
download | gitlab-ce-d86751d842f9547af0b7db17eacb89e940a106f7.tar.gz |
Incorporate Gitaly's RemoteService.UpdateRemoteMirror RPCgitaly-update-remote-mirror
Diffstat (limited to 'lib/gitlab/gitaly_client')
-rw-r--r-- | lib/gitlab/gitaly_client/remote_service.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/gitlab/gitaly_client/remote_service.rb b/lib/gitlab/gitaly_client/remote_service.rb index e58f641d69a..58c356edfd1 100644 --- a/lib/gitlab/gitaly_client/remote_service.rb +++ b/lib/gitlab/gitaly_client/remote_service.rb @@ -1,6 +1,8 @@ module Gitlab module GitalyClient class RemoteService + MAX_MSG_SIZE = 128.kilobytes.freeze + def initialize(repository) @repository = repository @gitaly_repo = repository.gitaly_repository @@ -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 |