merge_when_build_succeeds_service.rb 1.6 KB
Newer Older
Z
Zeger-Jan van de Weg 已提交
1 2
module MergeRequests
  class MergeWhenBuildSucceedsService < MergeRequests::BaseService
Z
Zeger-Jan van de Weg 已提交
3
    # Marks the passed `merge_request` to be merged when the build succeeds or
4
    # updates the params for the automatic merge
Z
Zeger-Jan van de Weg 已提交
5
    def execute(merge_request)
6
      merge_request.merge_params.merge!(params)
Z
Zeger-Jan van de Weg 已提交
7 8 9 10 11 12 13 14

      # The service is also called when the merge params are updated.
      already_approved = merge_request.merge_when_build_succeeds?

      unless already_approved
        merge_request.merge_when_build_succeeds = true
        merge_request.merge_user                = @current_user

Z
Zeger-Jan van de Weg 已提交
15
        SystemNoteService.merge_when_build_succeeds(merge_request, @project, @current_user, merge_request.last_commit)
Z
Zeger-Jan van de Weg 已提交
16
      end
17 18

      merge_request.save
Z
Zeger-Jan van de Weg 已提交
19 20
    end

21
    # Triggers the automatic merge of merge_request once the build succeeds
22
    def trigger(commit_status)
23
      each_merge_request(commit_status) do |merge_request, pipeline|
Z
Zeger-Jan van de Weg 已提交
24
        next unless merge_request.merge_when_build_succeeds?
25
        next unless merge_request.mergeable?
26
        next unless pipeline.success?
27 28

        MergeWorker.perform_async(merge_request.id, merge_request.merge_user_id, merge_request.merge_params)
Z
Zeger-Jan van de Weg 已提交
29 30 31
      end
    end

32 33
    # Cancels the automatic merge
    def cancel(merge_request)
Z
Zeger-Jan van de Weg 已提交
34
      if merge_request.merge_when_build_succeeds? && merge_request.open?
35 36 37 38 39 40 41 42 43
        merge_request.reset_merge_when_build_succeeds
        SystemNoteService.cancel_merge_when_build_succeeds(merge_request, @project, @current_user)

        success
      else
        error("Can't cancel the automatic merge", 406)
      end
    end

Z
Zeger-Jan van de Weg 已提交
44 45
  end
end