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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-07-15 09:09:57 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-07-15 09:09:57 +0300
commit4b41b57abf3ad9c2e0e81b3804cb01af6f879349 (patch)
treefc8919c5c45d52d860b0f267fdab23c787243659 /lib/gitlab/gitaly_client
parent08e3d715127256b53529a7719b80569aa0d8bc52 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/gitaly_client')
-rw-r--r--lib/gitlab/gitaly_client/operation_service.rb25
-rw-r--r--lib/gitlab/gitaly_client/ref_service.rb11
2 files changed, 16 insertions, 20 deletions
diff --git a/lib/gitlab/gitaly_client/operation_service.rb b/lib/gitlab/gitaly_client/operation_service.rb
index ac40f041ae7..35d3ddf5d7f 100644
--- a/lib/gitlab/gitaly_client/operation_service.rb
+++ b/lib/gitlab/gitaly_client/operation_service.rb
@@ -102,7 +102,7 @@ module Gitlab
raise Gitlab::Git::PreReceiveError, pre_receive_error
end
rescue GRPC::BadStatus => e
- detailed_error = decode_detailed_error(e)
+ detailed_error = GitalyClient.decode_detailed_error(e)
case detailed_error&.error
when :custom_hook
@@ -166,7 +166,7 @@ module Gitlab
Gitlab::Git::OperationService::BranchUpdate.from_gitaly(branch_update)
rescue GRPC::BadStatus => e
- detailed_error = decode_detailed_error(e)
+ detailed_error = GitalyClient.decode_detailed_error(e)
case detailed_error&.error
when :access_check
@@ -277,7 +277,7 @@ module Gitlab
rebase_sha
rescue GRPC::BadStatus => e
- detailed_error = decode_detailed_error(e)
+ detailed_error = GitalyClient.decode_detailed_error(e)
case detailed_error&.error
when :access_check
@@ -314,7 +314,7 @@ module Gitlab
response.squash_sha
rescue GRPC::BadStatus => e
- detailed_error = decode_detailed_error(e)
+ detailed_error = GitalyClient.decode_detailed_error(e)
case detailed_error&.error
when :resolve_revision, :rebase_conflict
@@ -474,7 +474,7 @@ module Gitlab
handle_cherry_pick_or_revert_response(response)
rescue GRPC::BadStatus => e
- detailed_error = decode_detailed_error(e)
+ detailed_error = GitalyClient.decode_detailed_error(e)
case detailed_error&.error
when :access_check
@@ -538,21 +538,6 @@ module Gitlab
raise ArgumentError, "Unknown action '#{action[:action]}'"
end
- def decode_detailed_error(err)
- # details could have more than one in theory, but we only have one to worry about for now.
- detailed_error = err.to_rpc_status&.details&.first
-
- return unless detailed_error.present?
-
- prefix = %r{type\.googleapis\.com\/gitaly\.(?<error_type>.+)}
- error_type = prefix.match(detailed_error.type_url)[:error_type]
-
- Gitaly.const_get(error_type, false).decode(detailed_error.value)
- rescue NameError, NoMethodError
- # Error Class might not be known to ruby yet
- nil
- end
-
def custom_hook_error_message(custom_hook_error)
# Custom hooks may return messages via either stdout or stderr which have a specific prefix. If
# that prefix is present we'll want to print the hook's output, otherwise we'll want to print the
diff --git a/lib/gitlab/gitaly_client/ref_service.rb b/lib/gitlab/gitaly_client/ref_service.rb
index c064811b1e7..31e1406356f 100644
--- a/lib/gitlab/gitaly_client/ref_service.rb
+++ b/lib/gitlab/gitaly_client/ref_service.rb
@@ -132,6 +132,17 @@ module Gitlab
response = GitalyClient.call(@repository.storage, :ref_service, :delete_refs, request, timeout: GitalyClient.medium_timeout)
raise Gitlab::Git::Repository::GitError, response.git_error if response.git_error.present?
+ rescue GRPC::BadStatus => e
+ detailed_error = GitalyClient.decode_detailed_error(e)
+
+ case detailed_error&.error
+ when :invalid_format
+ raise Gitlab::Git::InvalidRefFormatError, "references have an invalid format: #{detailed_error.invalid_format.refs.join(",")}"
+ when :references_locked
+ raise Gitlab::Git::ReferencesLockedError
+ else
+ raise e
+ end
end
# Limit: 0 implies no limit, thus all tag names will be returned