merge_when_pipeline_succeeds_service.rb 1.6 KB
Newer Older
Z
Zeger-Jan van de Weg 已提交
1
module MergeRequests
2
  class MergeWhenPipelineSucceedsService < MergeRequests::BaseService
J
James Lopez 已提交
3
    # Marks the passed `merge_request` to be merged when the pipeline 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

      # The service is also called when the merge params are updated.
J
James Lopez 已提交
9
      already_approved = merge_request.merge_when_pipeline_succeeds?
Z
Zeger-Jan van de Weg 已提交
10 11

      unless already_approved
J
James Lopez 已提交
12 13
        merge_request.merge_when_pipeline_succeeds = true
        merge_request.merge_user = @current_user
Z
Zeger-Jan van de Weg 已提交
14

J
James Lopez 已提交
15
        SystemNoteService.merge_when_pipeline_succeeds(merge_request, @project, @current_user, merge_request.diff_head_commit)
Z
Zeger-Jan van de Weg 已提交
16
      end
17 18

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

21 22 23 24 25
    # Triggers the automatic merge of merge_request once the pipeline succeeds
    def trigger(pipeline)
      return unless pipeline.success?

      pipeline_merge_requests(pipeline) do |merge_request|
J
James Lopez 已提交
26
        next unless merge_request.merge_when_pipeline_succeeds?
27 28 29 30 31

        unless merge_request.mergeable?
          todo_service.merge_request_became_unmergeable(merge_request)
          next
        end
32

33
        merge_request.merge_async(merge_request.merge_user_id, merge_request.merge_params)
Z
Zeger-Jan van de Weg 已提交
34 35 36
      end
    end

37 38
    # Cancels the automatic merge
    def cancel(merge_request)
J
James Lopez 已提交
39 40 41
      if merge_request.merge_when_pipeline_succeeds? && merge_request.open?
        merge_request.reset_merge_when_pipeline_succeeds
        SystemNoteService.cancel_merge_when_pipeline_succeeds(merge_request, @project, @current_user)
42 43 44 45 46 47

        success
      else
        error("Can't cancel the automatic merge", 406)
      end
    end
Z
Zeger-Jan van de Weg 已提交
48 49
  end
end