diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 2035bffd829..790555ab045 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1322,7 +1322,7 @@ class MergeRequest < ActiveRecord::Base def base_pipeline @base_pipeline ||= project.ci_pipelines .order(id: :desc) - .find_by(sha: diff_base_sha) + .find_by(sha: diff_base_sha, ref: target_branch) end def discussions_rendered_on_frontend? diff --git a/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml b/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml new file mode 100644 index 00000000000..d89819eee60 --- /dev/null +++ b/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml @@ -0,0 +1,5 @@ +--- +title: Ensure the base pipeline of a Merge Request belongs to its target branch +merge_request: 25226 +author: +type: fixed diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index afa87b8a62d..fbd19b024a0 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -2604,8 +2604,9 @@ describe MergeRequest do let!(:first_pipeline) { create(:ci_pipeline_without_jobs, pipeline_arguments) } let!(:last_pipeline) { create(:ci_pipeline_without_jobs, pipeline_arguments) } + let!(:last_pipeline_with_other_ref) { create(:ci_pipeline_without_jobs, pipeline_arguments.merge(ref: 'other')) } - it 'returns latest pipeline' do + it 'returns latest pipeline for the target branch' do expect(merge_request.base_pipeline).to eq(last_pipeline) end end