summaryrefslogtreecommitdiff
path: root/app/workers/merge_requests/delete_source_branch_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/merge_requests/delete_source_branch_worker.rb')
-rw-r--r--app/workers/merge_requests/delete_source_branch_worker.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/app/workers/merge_requests/delete_source_branch_worker.rb b/app/workers/merge_requests/delete_source_branch_worker.rb
new file mode 100644
index 00000000000..eb83d10af33
--- /dev/null
+++ b/app/workers/merge_requests/delete_source_branch_worker.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class MergeRequests::DeleteSourceBranchWorker
+ include ApplicationWorker
+
+ feature_category :source_code_management
+ urgency :high
+ idempotent!
+
+ def perform(merge_request_id, source_branch_sha, user_id)
+ merge_request = MergeRequest.find(merge_request_id)
+ user = User.find(user_id)
+
+ # Source branch changed while it's being removed
+ return if merge_request.source_branch_sha != source_branch_sha
+
+ ::Branches::DeleteService.new(merge_request.source_project, user)
+ .execute(merge_request.source_branch)
+
+ ::MergeRequests::RetargetChainService.new(merge_request.source_project, user)
+ .execute(merge_request)
+ rescue ActiveRecord::RecordNotFound
+ end
+end