summaryrefslogtreecommitdiff
path: root/lib/gitlab/gitaly_client/operation_service.rb
diff options
context:
space:
mode:
authorJacob Vosmaer <jacob@gitlab.com>2017-10-10 14:15:21 +0200
committerJacob Vosmaer <jacob@gitlab.com>2017-10-13 14:07:31 +0200
commit0aff29f96b54e8036fe46315adb45295bc6c9efd (patch)
tree23110ac96a9d0d8455aed256d5bdb05174af5919 /lib/gitlab/gitaly_client/operation_service.rb
parentc08fea6fd3b69c5efad14cf39783ef71a7006fad (diff)
downloadgitlab-ce-0aff29f96b54e8036fe46315adb45295bc6c9efd.tar.gz
Merge Merge Requests via Gitaly
Diffstat (limited to 'lib/gitlab/gitaly_client/operation_service.rb')
-rw-r--r--lib/gitlab/gitaly_client/operation_service.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/gitlab/gitaly_client/operation_service.rb b/lib/gitlab/gitaly_client/operation_service.rb
index 81ddaf13e10..91f34011f6e 100644
--- a/lib/gitlab/gitaly_client/operation_service.rb
+++ b/lib/gitlab/gitaly_client/operation_service.rb
@@ -74,6 +74,37 @@ module Gitlab
raise Gitlab::Git::HooksService::PreReceiveError, pre_receive_error
end
end
+
+ def user_merge_branch(user, source_sha, target_branch, message)
+ request_enum = QueueEnumerator.new
+ response_enum = GitalyClient.call(
+ @repository.storage,
+ :operation_service,
+ :user_merge_branch,
+ request_enum.each
+ )
+
+ request_enum.push(
+ Gitaly::UserMergeBranchRequest.new(
+ repository: @gitaly_repo,
+ user: Util.gitaly_user(user),
+ commit_id: source_sha,
+ branch: GitalyClient.encode(target_branch),
+ message: GitalyClient.encode(message)
+ )
+ )
+
+ yield response_enum.next.commit_id
+
+ request_enum.push(Gitaly::UserMergeBranchRequest.new(apply: true))
+
+ branch_update = response_enum.next.branch_update
+ raise Gitlab::Git::CommitError.new('failed to apply merge to branch') unless branch_update.commit_id.present?
+
+ Gitlab::Git::OperationService::BranchUpdate.from_gitaly(branch_update)
+ ensure
+ request_enum.close
+ end
end
end
end