diff options
author | Alejandro RodrÃguez <alejorro70@gmail.com> | 2017-12-05 19:18:20 -0300 |
---|---|---|
committer | Alejandro RodrÃguez <alejorro70@gmail.com> | 2017-12-27 15:14:25 -0300 |
commit | 0aa87bbe13ca74a791bf5c70a12d8e7f6876fd5a (patch) | |
tree | 969685fa1afcde794cc216edd31030fb06d54559 /lib/gitlab/gitaly_client | |
parent | 351f205c0580e43ace9d5a47e0b923ffb7cda3b8 (diff) | |
download | gitlab-ce-0aa87bbe13ca74a791bf5c70a12d8e7f6876fd5a.tar.gz |
Incorporate ConflictsService.ResolveConflicts Gitaly RPC
Diffstat (limited to 'lib/gitlab/gitaly_client')
-rw-r--r-- | lib/gitlab/gitaly_client/conflicts_service.rb | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/lib/gitlab/gitaly_client/conflicts_service.rb b/lib/gitlab/gitaly_client/conflicts_service.rb index 6508e436301..49513ebeecd 100644 --- a/lib/gitlab/gitaly_client/conflicts_service.rb +++ b/lib/gitlab/gitaly_client/conflicts_service.rb @@ -1,16 +1,20 @@ module Gitlab module GitalyClient class ConflictsService - def initialize(repository) + MAX_MSG_SIZE = 128.kilobytes.freeze + + def initialize(repository, our_commit_oid, their_commit_oid) @gitaly_repo = repository.gitaly_repository @repository = repository + @our_commit_oid = our_commit_oid + @their_commit_oid = their_commit_oid end - def list_conflict_files(our_commit_oid, their_commit_oid) + def list_conflict_files request = Gitaly::ListConflictFilesRequest.new( repository: @gitaly_repo, - our_commit_oid: our_commit_oid, - their_commit_oid: their_commit_oid + our_commit_oid: @our_commit_oid, + their_commit_oid: @their_commit_oid ) response = GitalyClient.call(@repository.storage, :conflicts_service, :list_conflict_files, request) files = [] @@ -38,6 +42,27 @@ module Gitlab files end + def resolve_conflicts(target_repository, user, files, source_branch, target_branch, commit_message) + reader = GitalyClient.binary_stringio(files.to_json) + + req_enum = Enumerator.new do |y| + header = resolve_conflicts_request_header(target_repository, user, source_branch, target_branch, commit_message) + y.yield Gitaly::ResolveConflictsRequest.new(header: header) + + until reader.eof? + chunk = reader.read(MAX_MSG_SIZE) + + y.yield Gitaly::ResolveConflictsRequest.new(files_json: chunk) + end + end + + response = GitalyClient.call(@repository.storage, :conflicts_service, :resolve_conflicts, req_enum, remote_storage: target_repository.storage) + + if response.resolution_error.present? + raise Gitlab::Git::Conflict::Resolver::ResolutionError, response.resolution_error + end + end + private def conflict_file_from_gitaly(header, content) @@ -55,6 +80,19 @@ module Gitlab theirs: { path: header.their_path } } end + + def resolve_conflicts_request_header(target_repository, user, source_branch, target_branch, commit_message) + Gitaly::ResolveConflictsRequestHeader.new( + repository: @gitaly_repo, + our_commit_oid: @our_commit_oid, + target_repository: target_repository.gitaly_repository, + their_commit_oid: @their_commit_oid, + source_branch: source_branch, + target_branch: target_branch, + commit_message: commit_message, + user: Gitlab::Git::User.from_gitlab(user).to_gitaly + ) + end end end end |