Merge branch 'show-all-pipelines-from-all-diffs' into 'master'
Show all pipelines from all merge_request_diffs This way we could also show pipelines from commits which were discarded due to a force push. Closes #21889 See merge request !6414
This commit is contained in:
commit
529b17d11c
4 changed files with 79 additions and 10 deletions
|
@ -45,6 +45,7 @@ v 8.12.0 (unreleased)
|
||||||
- Added horizontal padding on build page sidebar on code coverage block. !6196 (Vitaly Baev)
|
- Added horizontal padding on build page sidebar on code coverage block. !6196 (Vitaly Baev)
|
||||||
- Change merge_error column from string to text type
|
- Change merge_error column from string to text type
|
||||||
- Reduce contributions calendar data payload (ClemMakesApps)
|
- Reduce contributions calendar data payload (ClemMakesApps)
|
||||||
|
- Show all pipelines for merge requests even from discarded commits !6414
|
||||||
- Replace contributions calendar timezone payload with dates (ClemMakesApps)
|
- Replace contributions calendar timezone payload with dates (ClemMakesApps)
|
||||||
- Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel)
|
- Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel)
|
||||||
- Enable pipeline events by default !6278
|
- Enable pipeline events by default !6278
|
||||||
|
|
|
@ -764,10 +764,23 @@ class MergeRequest < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def all_pipelines
|
def all_pipelines
|
||||||
@all_pipelines ||=
|
return unless source_project
|
||||||
if diff_head_sha && source_project
|
|
||||||
source_project.pipelines.order(id: :desc).where(sha: commits_sha, ref: source_branch)
|
@all_pipelines ||= begin
|
||||||
end
|
sha = if persisted?
|
||||||
|
all_commits_sha
|
||||||
|
else
|
||||||
|
diff_head_sha
|
||||||
|
end
|
||||||
|
|
||||||
|
source_project.pipelines.order(id: :desc).
|
||||||
|
where(sha: sha, ref: source_branch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Note that this could also return SHA from now dangling commits
|
||||||
|
def all_commits_sha
|
||||||
|
merge_request_diffs.flat_map(&:commits_sha).uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_commit
|
def merge_commit
|
||||||
|
|
|
@ -117,6 +117,14 @@ class MergeRequestDiff < ActiveRecord::Base
|
||||||
project.commit(head_commit_sha)
|
project.commit(head_commit_sha)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def commits_sha
|
||||||
|
if @commits
|
||||||
|
commits.map(&:sha)
|
||||||
|
else
|
||||||
|
st_commits.map { |commit| commit[:id] }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def diff_refs
|
def diff_refs
|
||||||
return unless start_commit_sha || base_commit_sha
|
return unless start_commit_sha || base_commit_sha
|
||||||
|
|
||||||
|
|
|
@ -495,15 +495,62 @@ describe MergeRequest, models: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#all_pipelines' do
|
describe '#all_pipelines' do
|
||||||
let!(:pipelines) do
|
shared_examples 'returning pipelines with proper ordering' do
|
||||||
subject.merge_request_diff.commits.map do |commit|
|
let!(:all_pipelines) do
|
||||||
create(:ci_empty_pipeline, project: subject.source_project, sha: commit.id, ref: subject.source_branch)
|
subject.all_commits_sha.map do |sha|
|
||||||
|
create(:ci_empty_pipeline,
|
||||||
|
project: subject.source_project,
|
||||||
|
sha: sha,
|
||||||
|
ref: subject.source_branch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns all pipelines' do
|
||||||
|
expect(subject.all_pipelines).not_to be_empty
|
||||||
|
expect(subject.all_pipelines).to eq(all_pipelines.reverse)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a pipelines from source projects with proper ordering' do
|
context 'with single merge_request_diffs' do
|
||||||
expect(subject.all_pipelines).not_to be_empty
|
it_behaves_like 'returning pipelines with proper ordering'
|
||||||
expect(subject.all_pipelines).to eq(pipelines.reverse)
|
end
|
||||||
|
|
||||||
|
context 'with multiple irrelevant merge_request_diffs' do
|
||||||
|
before do
|
||||||
|
subject.update(target_branch: 'markdown')
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'returning pipelines with proper ordering'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with unsaved merge request' do
|
||||||
|
subject { build(:merge_request) }
|
||||||
|
|
||||||
|
let!(:pipeline) do
|
||||||
|
create(:ci_empty_pipeline,
|
||||||
|
project: subject.project,
|
||||||
|
sha: subject.diff_head_sha,
|
||||||
|
ref: subject.source_branch)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns pipelines from diff_head_sha' do
|
||||||
|
expect(subject.all_pipelines).to contain_exactly(pipeline)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#all_commits_sha' do
|
||||||
|
let(:all_commits_sha) do
|
||||||
|
subject.merge_request_diffs.flat_map(&:commits).map(&:sha).uniq
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
subject.update(target_branch: 'markdown')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns all SHA from all merge_request_diffs' do
|
||||||
|
expect(subject.merge_request_diffs.size).to eq(2)
|
||||||
|
expect(subject.all_commits_sha).to eq(all_commits_sha)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue