Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/auto_merge/base_service.rb')
-rw-r--r--app/services/auto_merge/base_service.rb54
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