diff options
author | Shinya Maeda <shinya@gitlab.com> | 2019-05-27 19:26:39 +0700 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2019-06-06 10:35:43 +0700 |
commit | 31afb0e8addf73f6cbcf4213ad2c386488c95715 (patch) | |
tree | 7aa22bfc5ba270e586b46ea9a2763dacf23d2df4 /app/services | |
parent | 1bec362138bfcf6343a9cbc951ef5c8c07d2baaa (diff) | |
download | gitlab-ce-create-merge-request-create-pipeline-service.tar.gz |
Introduce service for merge request pipeline creationcreate-merge-request-create-pipeline-service
We don't have a way to create MR pipeline today, this is one
of the headaches for users.
This change is a preliminary work for the capability.
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/merge_requests/base_service.rb | 26 | ||||
-rw-r--r-- | app/services/merge_requests/create_pipeline_service.rb | 37 |
2 files changed, 38 insertions, 25 deletions
diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index bb9062e9b40..2cfed62ce49 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -60,31 +60,7 @@ module MergeRequests end def create_pipeline_for(merge_request, user) - return unless can_create_pipeline_for?(merge_request) - - create_detached_merge_request_pipeline(merge_request, user) - end - - def create_detached_merge_request_pipeline(merge_request, user) - if can_use_merge_request_ref?(merge_request) - Ci::CreatePipelineService.new(merge_request.source_project, user, - ref: merge_request.ref_path) - .execute(:merge_request_event, merge_request: merge_request) - else - Ci::CreatePipelineService.new(merge_request.source_project, user, - ref: merge_request.source_branch) - .execute(:merge_request_event, merge_request: merge_request) - end - end - - def can_create_pipeline_for?(merge_request) - ## - # UpdateMergeRequestsWorker could be retried by an exception. - # pipelines for merge request should not be recreated in such case. - return false if merge_request.find_actual_head_pipeline&.triggered_by_merge_request? - return false if merge_request.has_no_commits? - - true + MergeRequests::CreatePipelineService.new(project, user).execute(merge_request) end def can_use_merge_request_ref?(merge_request) diff --git a/app/services/merge_requests/create_pipeline_service.rb b/app/services/merge_requests/create_pipeline_service.rb new file mode 100644 index 00000000000..03246cc1920 --- /dev/null +++ b/app/services/merge_requests/create_pipeline_service.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module MergeRequests + class CreatePipelineService < MergeRequests::BaseService + def execute(merge_request) + return unless can_create_pipeline_for?(merge_request) + + create_detached_merge_request_pipeline(merge_request) + end + + def create_detached_merge_request_pipeline(merge_request) + if can_use_merge_request_ref?(merge_request) + Ci::CreatePipelineService.new(merge_request.source_project, current_user, + ref: merge_request.ref_path) + .execute(:merge_request_event, merge_request: merge_request) + else + Ci::CreatePipelineService.new(merge_request.source_project, current_user, + ref: merge_request.source_branch) + .execute(:merge_request_event, merge_request: merge_request) + end + end + + def can_create_pipeline_for?(merge_request) + ## + # UpdateMergeRequestsWorker could be retried by an exception. + # pipelines for merge request should not be recreated in such case. + return false if !allow_duplicate && merge_request.find_actual_head_pipeline&.triggered_by_merge_request? + return false if merge_request.has_no_commits? + + true + end + + def allow_duplicate + params[:allow_duplicate] + end + end +end |