gitlab-org--gitlab-foss/app/services/merge_requests/merge_when_build_succeeds_s...

46 lines
1.6 KiB
Ruby
Raw Normal View History

2015-11-02 16:27:38 +00:00
module MergeRequests
class MergeWhenBuildSucceedsService < MergeRequests::BaseService
2015-12-03 09:27:34 +00:00
# Marks the passed `merge_request` to be merged when the build succeeds or
# updates the params for the automatic merge
2015-11-02 16:27:38 +00:00
def execute(merge_request)
2015-11-18 10:17:41 +00:00
merge_request.merge_params.merge!(params)
2015-11-02 16:27:38 +00:00
# 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
2015-12-03 09:27:34 +00:00
SystemNoteService.merge_when_build_succeeds(merge_request, @project, @current_user, merge_request.last_commit)
2015-11-02 16:27:38 +00:00
end
2015-11-24 13:59:02 +00:00
merge_request.save
2015-11-02 16:27:38 +00:00
end
# Triggers the automatic merge of merge_request once the build succeeds
def trigger(commit_status)
each_merge_request(commit_status) do |merge_request, ci_commit|
2015-11-02 16:27:38 +00:00
next unless merge_request.merge_when_build_succeeds?
next unless merge_request.mergeable?
next unless ci_commit.success?
MergeWorker.perform_async(merge_request.id, merge_request.merge_user_id, merge_request.merge_params)
2015-11-02 16:27:38 +00:00
end
end
# Cancels the automatic merge
def cancel(merge_request)
2015-12-03 09:27:34 +00:00
if merge_request.merge_when_build_succeeds? && merge_request.open?
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
2015-11-02 16:27:38 +00:00
end
end