Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ruby/lib/gitaly_server/operations_service.rb')
-rw-r--r--ruby/lib/gitaly_server/operations_service.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/ruby/lib/gitaly_server/operations_service.rb b/ruby/lib/gitaly_server/operations_service.rb
index 948f57fba..20918dbfd 100644
--- a/ruby/lib/gitaly_server/operations_service.rb
+++ b/ruby/lib/gitaly_server/operations_service.rb
@@ -2,6 +2,40 @@ module GitalyServer
class OperationsService < Gitaly::OperationService::Service
include Utils
+ def user_create_tag(request, call)
+ repo = Gitlab::Git::Repository.from_call(call)
+
+ gitaly_user = request.user
+ raise GRPC::InvalidArgument.new('empty user') unless gitaly_user
+ user = Gitlab::Git::User.from_gitaly(gitaly_user)
+
+ tag_name = request.tag_name
+ raise GRPC::InvalidArgument.new('empty tag name') unless tag_name.present?
+
+ target_revision = request.target_revision
+ raise GRPC::InvalidArgument.new('empty target revision') unless target_revision.present?
+
+ created_tag = repo.add_tag(tag_name, user: user, target: target_revision, message: request.message.presence)
+ return Gitaly::UserCreateTagResponse.new unless created_tag
+
+ rugged_commit = created_tag.dereferenced_target.rugged_commit
+ commit = gitaly_commit_from_rugged(rugged_commit)
+ tag = Gitaly::Tag.new(
+ name: tag_name.b,
+ id: created_tag.target,
+ target_commit: commit,
+ message: created_tag.message.to_s.b
+ )
+
+ Gitaly::UserCreateTagResponse.new(tag: tag)
+ rescue Gitlab::Git::Repository::InvalidRef => e
+ raise GRPC::FailedPrecondition.new(e.message)
+ rescue Rugged::TagError
+ return Gitaly::UserCreateTagResponse.new(exists: true)
+ rescue Gitlab::Git::HooksService::PreReceiveError => e
+ return Gitaly::UserCreateTagResponse.new(pre_receive_error: e.message)
+ end
+
def user_delete_tag(request, call)
repo = Gitlab::Git::Repository.from_call(call)