From 0c5c735956eb2d057bcf218d8d63ad7752b8e71b Mon Sep 17 00:00:00 2001 From: Vasilii Iakliushin Date: Mon, 17 Mar 2025 10:59:22 +0100 Subject: [PATCH] Tags::CreateService: add a handler for NoRepository exception Contributes to https://gitlab.com/gitlab-org/gitlab/-/issues/525296 **Problem** When provided tag information is incorrect, Gitaly returns a "Could not update refs/tags/%s. Please refresh and try again." error. This error is not handled by Rails and causes a 500 error. **Solution** Add a handler for this exception and return a user-friendly error message instead. Changelog: fixed --- app/services/tags/create_service.rb | 2 ++ spec/services/tags/create_service_spec.rb | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/app/services/tags/create_service.rb b/app/services/tags/create_service.rb index e332b51ae94db1..355525364164cb 100644 --- a/app/services/tags/create_service.rb +++ b/app/services/tags/create_service.rb @@ -19,6 +19,8 @@ def execute(tag_name, target, message) return error("Tag #{tag_name} already exists", 409) rescue Gitlab::Git::PreReceiveError => ex return error(ex.message) + rescue Gitlab::Git::Repository::NoRepository + return error("Failed to create a tag: #{tag_name}", 400) end if new_tag diff --git a/spec/services/tags/create_service_spec.rb b/spec/services/tags/create_service_spec.rb index 51b8bace62636e..9dcc87cde57b57 100644 --- a/spec/services/tags/create_service_spec.rb +++ b/spec/services/tags/create_service_spec.rb @@ -47,6 +47,16 @@ end end + context 'when tag format is incorrect' do + it 'returns an error' do + response = service.execute("\x7f", 'master', 'Foo') + + expect(response[:status]).to eq(:error) + expect(response[:http_status]).to eq(400) + expect(response[:message]).to eq("Failed to create a tag: \u007F") + end + end + context 'when tag already exists' do it 'returns an error' do expect(repository).to receive(:add_tag) -- GitLab