diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index 5f00b4d85c6b18b40d7f2f1f1f321050be1757f5..f6cbe88912862354544dd0f40e5880b8d3e7e378 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -94,6 +94,10 @@ def merge_request_activity_counter private + def refresh_pipelines_on_merge_requests(merge_request, allow_duplicate: false) + create_pipeline_for(merge_request, current_user, async: true, allow_duplicate: allow_duplicate) + end + def enqueue_jira_connect_messages_for(merge_request) return unless project.jira_subscription_exists? diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb index 533d0052fb88743e1dc779d66071f2c5b74b0f4a..ce49d5dd43caec00fb1e6f7d76bcea9aa8057fbb 100644 --- a/app/services/merge_requests/refresh_service.rb +++ b/app/services/merge_requests/refresh_service.rb @@ -162,10 +162,6 @@ def outdate_service @outdate_service ||= Suggestions::OutdateService.new end - def refresh_pipelines_on_merge_requests(merge_request) - create_pipeline_for(merge_request, current_user, async: true) - end - def abort_auto_merges(merge_request) abort_auto_merge(merge_request, 'source branch was updated') end diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 745647b727c0ee5665ae810dce8a8caa2215269d..a273b853c0d271bedad2c9d9fc6267e45c06c6b9 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -169,6 +169,8 @@ def handle_target_branch_change(merge_request) merge_request.target_branch ) + refresh_pipelines_on_merge_requests(merge_request, allow_duplicate: true) + abort_auto_merge(merge_request, 'target branch was changed') end diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index 353af5a594aa7b945d04236ccdaa19588b2093af..344d93fc5cab2247e60160264d3a08c409995220 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -479,6 +479,16 @@ def update_merge_request(opts) end end + shared_examples_for "creates a new pipeline" do + it "creates a new pipeline" do + expect(MergeRequests::CreatePipelineWorker) + .to receive(:perform_async) + .with(project.id, user.id, merge_request.id, { "allow_duplicate" => true }) + + update_merge_request(target_branch: new_target_branch) + end + end + shared_examples_for 'correct merge behavior' do let(:opts) do { @@ -799,6 +809,10 @@ def update_merge_request(opts) update_merge_request({ target_branch: "target" }) end + + it_behaves_like "creates a new pipeline" do + let(:new_target_branch) { "target" } + end end context 'when auto merge is enabled and target branch changed' do @@ -813,6 +827,10 @@ def update_merge_request(opts) update_merge_request({ target_branch: 'target' }) end + + it_behaves_like "creates a new pipeline" do + let(:new_target_branch) { "target" } + end end end @@ -1237,6 +1255,10 @@ def update_merge_request(opts) expect { update_merge_request(target_branch: 'master', target_branch_was_deleted: true) } .to change { merge_request.reload.target_branch }.from('mr-a').to('master') end + + it_behaves_like "creates a new pipeline" do + let(:new_target_branch) { "target" } + end end it_behaves_like 'issuable record that supports quick actions' do