Commit 4a4338fc authored by Alejandro Rodríguez's avatar Alejandro Rodríguez

Use Gitaly's OperationService.UserUpdateBranch RPC

parent 0ed8f349
...@@ -651,8 +651,14 @@ module Gitlab ...@@ -651,8 +651,14 @@ module Gitlab
end end
def update_branch(branch_name, user:, newrev:, oldrev:) def update_branch(branch_name, user:, newrev:, oldrev:)
gitaly_migrate(:operation_user_update_branch) do |is_enabled|
if is_enabled
gitaly_operations_client.user_update_branch(branch_name, user, newrev, oldrev)
else
OperationService.new(user, self).update_branch(branch_name, newrev, oldrev) OperationService.new(user, self).update_branch(branch_name, newrev, oldrev)
end end
end
end
def rm_branch(branch_name, user:) def rm_branch(branch_name, user:)
wrapped_gitaly_errors do wrapped_gitaly_errors do
......
...@@ -68,6 +68,22 @@ module Gitlab ...@@ -68,6 +68,22 @@ module Gitlab
raise Gitlab::Git::Repository::InvalidRef, ex raise Gitlab::Git::Repository::InvalidRef, ex
end end
def user_update_branch(branch_name, user, newrev, oldrev)
request = Gitaly::UserUpdateBranchRequest.new(
repository: @gitaly_repo,
branch_name: encode_binary(branch_name),
user: Gitlab::Git::User.from_gitlab(user).to_gitaly,
newrev: encode_binary(newrev),
oldrev: encode_binary(oldrev)
)
response = GitalyClient.call(@repository.storage, :operation_service, :user_update_branch, request)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
end
end
def user_delete_branch(branch_name, user) def user_delete_branch(branch_name, user)
request = Gitaly::UserDeleteBranchRequest.new( request = Gitaly::UserDeleteBranchRequest.new(
repository: @gitaly_repo, repository: @gitaly_repo,
......
...@@ -53,6 +53,47 @@ describe Gitlab::GitalyClient::OperationService do ...@@ -53,6 +53,47 @@ describe Gitlab::GitalyClient::OperationService do
end end
end end
describe '#user_update_branch' do
let(:branch_name) { 'my-branch' }
let(:newrev) { '01e' }
let(:oldrev) { '01d' }
let(:request) do
Gitaly::UserUpdateBranchRequest.new(
repository: repository.gitaly_repository,
branch_name: branch_name,
newrev: newrev,
oldrev: oldrev,
user: gitaly_user
)
end
let(:response) { Gitaly::UserUpdateBranchResponse.new }
subject { client.user_update_branch(branch_name, user, newrev, oldrev) }
it 'sends a user_update_branch message' do
expect_any_instance_of(Gitaly::OperationService::Stub)
.to receive(:user_update_branch).with(request, kind_of(Hash))
.and_return(response)
subject
end
context "when pre_receive_error is present" do
let(:response) do
Gitaly::UserUpdateBranchResponse.new(pre_receive_error: "something failed")
end
it "throws a PreReceive exception" do
expect_any_instance_of(Gitaly::OperationService::Stub)
.to receive(:user_update_branch).with(request, kind_of(Hash))
.and_return(response)
expect { subject }.to raise_error(
Gitlab::Git::PreReceiveError, "something failed")
end
end
end
describe '#user_delete_branch' do describe '#user_delete_branch' do
let(:branch_name) { 'my-branch' } let(:branch_name) { 'my-branch' }
let(:request) do let(:request) do
......
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