Add link to MR from Build detail page. #3452
This commit is contained in:
parent
4dfd4e0366
commit
3f83a1585f
|
@ -135,6 +135,16 @@ module Ci
|
||||||
predefined_variables + yaml_variables + project_variables + trigger_variables
|
predefined_variables + yaml_variables + project_variables + trigger_variables
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def merge_request
|
||||||
|
merge_requests = MergeRequest.includes(:merge_request_diff)
|
||||||
|
.where(source_branch: ref, source_project_id: commit.gl_project_id)
|
||||||
|
.reorder(iid: :asc)
|
||||||
|
|
||||||
|
merge_requests.find do |merge_request|
|
||||||
|
merge_request.commits.any? { |ci| ci.id == commit.sha }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def project
|
def project
|
||||||
commit.project
|
commit.project
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,10 @@
|
||||||
%strong.monospace= link_to @build.commit.short_sha, ci_status_path(@build.commit)
|
%strong.monospace= link_to @build.commit.short_sha, ci_status_path(@build.commit)
|
||||||
from
|
from
|
||||||
= link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref)
|
= link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref)
|
||||||
|
- merge_request = @build.merge_request
|
||||||
|
- if merge_request
|
||||||
|
via
|
||||||
|
= link_to "merge request ##{merge_request.iid}", merge_request_path(merge_request)
|
||||||
|
|
||||||
#up-build-trace
|
#up-build-trace
|
||||||
- if @commit.matrix_for_ref?(@build.ref)
|
- if @commit.matrix_for_ref?(@build.ref)
|
||||||
|
|
|
@ -390,4 +390,68 @@ describe Ci::Build, models: true do
|
||||||
it { is_expected.to include('gitlab-ci-token') }
|
it { is_expected.to include('gitlab-ci-token') }
|
||||||
it { is_expected.to include(project.web_url[7..-1]) }
|
it { is_expected.to include(project.web_url[7..-1]) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_mr(build, commit, factory: :merge_request, created_at: Time.now)
|
||||||
|
FactoryGirl.create(factory,
|
||||||
|
source_project_id: commit.gl_project_id,
|
||||||
|
target_project_id: commit.gl_project_id,
|
||||||
|
source_branch: build.ref,
|
||||||
|
created_at: created_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe :merge_request do
|
||||||
|
context 'when a MR has a reference to the commit' do
|
||||||
|
before do
|
||||||
|
@merge_request = create_mr(build, commit, factory: :merge_request)
|
||||||
|
|
||||||
|
commits = [double(id: commit.sha)]
|
||||||
|
allow(@merge_request).to receive(:commits).and_return(commits)
|
||||||
|
allow(MergeRequest).to receive_message_chain(:includes, :where, :reorder).and_return([@merge_request])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the single associated MR' do
|
||||||
|
expect(build.merge_request.id).to eq(@merge_request.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there is not a MR referencing the commit' do
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(build.merge_request).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when more than one MR have a reference to the commit' do
|
||||||
|
before do
|
||||||
|
@merge_request = create_mr(build, commit, factory: :merge_request)
|
||||||
|
@merge_request.close!
|
||||||
|
@merge_request2 = create_mr(build, commit, factory: :merge_request)
|
||||||
|
|
||||||
|
commits = [double(id: commit.sha)]
|
||||||
|
allow(@merge_request).to receive(:commits).and_return(commits)
|
||||||
|
allow(@merge_request2).to receive(:commits).and_return(commits)
|
||||||
|
allow(MergeRequest).to receive_message_chain(:includes, :where, :reorder).and_return([@merge_request, @merge_request2])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the first MR' do
|
||||||
|
expect(build.merge_request.id).to eq(@merge_request.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when a Build is created after the MR' do
|
||||||
|
before do
|
||||||
|
@merge_request = create_mr(build, commit, factory: :merge_request_with_diffs)
|
||||||
|
commit2 = FactoryGirl.create :ci_commit, gl_project: gl_project
|
||||||
|
@build2 = FactoryGirl.create :ci_build, commit: commit2
|
||||||
|
|
||||||
|
commits = [double(id: commit.sha), double(id: commit2.sha)]
|
||||||
|
allow(@merge_request).to receive(:commits).and_return(commits)
|
||||||
|
allow(MergeRequest).to receive_message_chain(:includes, :where, :reorder).and_return([@merge_request])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the current MR' do
|
||||||
|
expect(@build2.merge_request.id).to eq(@merge_request.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue