Commit 2cedb243 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'gitaly-update-branch' into 'master'

Use Gitaly's OperationService.UserUpdateBranch RPC

Closes gitaly#1252

See merge request gitlab-org/gitlab-ce!20231
parents 55db9338 4a4338fc
...@@ -625,7 +625,13 @@ module Gitlab ...@@ -625,7 +625,13 @@ module Gitlab
end end
def update_branch(branch_name, user:, newrev:, oldrev:) def update_branch(branch_name, user:, newrev:, oldrev:)
OperationService.new(user, self).update_branch(branch_name, 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)
end
end
end end
def rm_branch(branch_name, user:) def rm_branch(branch_name, user:)
......
...@@ -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