diff options
Diffstat (limited to 'app/services/auto_merge/base_service.rb')
-rw-r--r-- | app/services/auto_merge/base_service.rb | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/app/services/auto_merge/base_service.rb b/app/services/auto_merge/base_service.rb index 1de2f31f87c..c4109765a1c 100644 --- a/app/services/auto_merge/base_service.rb +++ b/app/services/auto_merge/base_service.rb @@ -6,19 +6,18 @@ module AutoMerge include MergeRequests::AssignsMergeParams def execute(merge_request) - assign_allowed_merge_params(merge_request, params.merge(auto_merge_strategy: strategy)) - - merge_request.auto_merge_enabled = true - merge_request.merge_user = current_user - - return :failed unless merge_request.save - - yield if block_given? + ActiveRecord::Base.transaction do + register_auto_merge_parameters!(merge_request) + yield if block_given? + end # Notify the event that auto merge is enabled or merge param is updated AutoMergeProcessWorker.perform_async(merge_request.id) strategy.to_sym + rescue => e + track_exception(e, merge_request) + :failed end def update(merge_request) @@ -30,23 +29,27 @@ module AutoMerge end def cancel(merge_request) - if clear_auto_merge_parameters(merge_request) + ActiveRecord::Base.transaction do + clear_auto_merge_parameters!(merge_request) yield if block_given? - - success - else - error("Can't cancel the automatic merge", 406) end + + success + rescue => e + track_exception(e, merge_request) + error("Can't cancel the automatic merge", 406) end def abort(merge_request, reason) - if clear_auto_merge_parameters(merge_request) + ActiveRecord::Base.transaction do + clear_auto_merge_parameters!(merge_request) yield if block_given? - - success - else - error("Can't abort the automatic merge", 406) end + + success + rescue => e + track_exception(e, merge_request) + error("Can't abort the automatic merge", 406) end def available_for?(merge_request) @@ -65,7 +68,14 @@ module AutoMerge end end - def clear_auto_merge_parameters(merge_request) + def register_auto_merge_parameters!(merge_request) + assign_allowed_merge_params(merge_request, params.merge(auto_merge_strategy: strategy)) + merge_request.auto_merge_enabled = true + merge_request.merge_user = current_user + merge_request.save! + end + + def clear_auto_merge_parameters!(merge_request) merge_request.auto_merge_enabled = false merge_request.merge_user = nil @@ -76,7 +86,11 @@ module AutoMerge 'auto_merge_strategy' ) - merge_request.save + merge_request.save! + end + + def track_exception(error, merge_request) + Gitlab::ErrorTracking.track_exception(error, merge_request_id: merge_request&.id) end end end |