1# frozen_string_literal: true 2 3class MergeRequests::DeleteSourceBranchWorker 4 include ApplicationWorker 5 6 data_consistency :always 7 8 sidekiq_options retry: 3 9 10 feature_category :source_code_management 11 urgency :high 12 idempotent! 13 14 def perform(merge_request_id, source_branch_sha, user_id) 15 merge_request = MergeRequest.find(merge_request_id) 16 user = User.find(user_id) 17 18 # Source branch changed while it's being removed 19 return if merge_request.source_branch_sha != source_branch_sha 20 21 ::Branches::DeleteService.new(merge_request.source_project, user) 22 .execute(merge_request.source_branch) 23 24 ::MergeRequests::RetargetChainService.new(project: merge_request.source_project, current_user: user) 25 .execute(merge_request) 26 rescue ActiveRecord::RecordNotFound 27 end 28end 29