diff options
Diffstat (limited to 'app/workers/projects/delete_branch_worker.rb')
-rw-r--r-- | app/workers/projects/delete_branch_worker.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/app/workers/projects/delete_branch_worker.rb b/app/workers/projects/delete_branch_worker.rb new file mode 100644 index 00000000000..1949fb67e83 --- /dev/null +++ b/app/workers/projects/delete_branch_worker.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Projects + class DeleteBranchWorker + include ApplicationWorker + + data_consistency :always + + feature_category :source_code_management + urgency :high + idempotent! + + def perform(project_id, user_id, branch_name) + project = Project.find_by_id(project_id) + user = User.find_by_id(user_id) + + return unless project.present? && user.present? + return unless project.repository.branch_exists?(branch_name) + + delete_service_result = ::Branches::DeleteService.new(project, user) + .execute(branch_name) + + return unless Feature.enabled?(:track_and_raise_delete_source_errors, project) + # Only want to raise on 400 to avoid permission and non existant branch error + return unless delete_service_result[:http_status] == 400 + + delete_service_result.track_and_raise_exception + end + end +end |