diff options
Diffstat (limited to 'app/services/releases/update_service.rb')
-rw-r--r-- | app/services/releases/update_service.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/app/services/releases/update_service.rb b/app/services/releases/update_service.rb index 4786d35f31e..4e78120ac05 100644 --- a/app/services/releases/update_service.rb +++ b/app/services/releases/update_service.rb @@ -3,11 +3,9 @@ module Releases class UpdateService < Releases::BaseService def execute - return error('Tag does not exist', 404) unless existing_tag - return error('Release does not exist', 404) unless release - return error('Access Denied', 403) unless allowed? - return error('params is empty', 400) if empty_params? - return error("Milestone(s) not found: #{inexistent_milestones.join(', ')}", 400) if inexistent_milestones.any? + if error = validate + return error + end if param_for_milestone_titles_provided? previous_milestones = release.milestones.map(&:title) @@ -20,6 +18,7 @@ module Releases # see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/43385 ActiveRecord::Base.transaction do if release.update(params) + execute_hooks(release, 'update') success(tag: existing_tag, release: release, milestones_updated: milestones_updated?(previous_milestones)) else error(release.errors.messages || '400 Bad request', 400) @@ -31,6 +30,14 @@ module Releases private + def validate + return error('Tag does not exist', 404) unless existing_tag + return error('Release does not exist', 404) unless release + return error('Access Denied', 403) unless allowed? + return error('params is empty', 400) if empty_params? + return error("Milestone(s) not found: #{inexistent_milestones.join(', ')}", 400) if inexistent_milestones.any? + end + def allowed? Ability.allowed?(current_user, :update_release, release) end |