diff --git a/app/services/tags/create_service.rb b/app/services/tags/create_service.rb index e332b51ae94db1c472f6b00d1d636a50f53a9853..355525364164cb639bdc4e067c541404dd33d2cb 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 51b8bace62636eb93dbb63c21aa9a78e19bbd8c2..9dcc87cde57b57e9404f410ed7faa15ae74293c1 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)