diff options
| -rw-r--r-- | app/services/releases/create_service.rb | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/app/services/releases/create_service.rb b/app/services/releases/create_service.rb index 210bdfbc699..73fcebf79af 100644 --- a/app/services/releases/create_service.rb +++ b/app/services/releases/create_service.rb @@ -8,24 +8,30 @@ module Releases return error('Access Denied', 403) unless allowed? return error('Release already exists', 409) if release - new_tag = nil + tag = ensure_tag - unless tag_exist? - return error('Ref is not specified', 422) unless ref + return tag unless tag.is_a?(Gitlab::Git::Tag) - result = Tags::CreateService - .new(project, current_user) - .execute(tag_name, ref, nil) - - return result unless result[:status] == :success + create_release(tag) + end - new_tag = result[:tag] - end + private - create_release(existing_tag || new_tag) + def ensure_tag + existing_tag || create_tag end - private + def create_tag + return error('Ref is not specified', 422) unless ref + + result = Tags::CreateService + .new(project, current_user) + .execute(tag_name, ref, nil) + + return result unless result[:status] == :success + + result[:tag] + end def allowed? Ability.allowed?(current_user, :create_release, project) |
