Discover branches for commit statuses ref-less when doing merge when succeeded
This commit is contained in:
parent
56449cc674
commit
6febe1007e
|
@ -46,6 +46,7 @@ v 8.5.0 (unreleased)
|
|||
- Deprecate API "merge_request/:merge_request_id/comments". Use "merge_requests/:merge_request_id/notes" instead
|
||||
- Deprecate API "merge_request/:merge_request_id/...". Use "merge_requests/:merge_request_id/..." instead
|
||||
- Prevent parse error when name of project ends with .atom and prevent path issues
|
||||
- Discover branches for commit statuses ref-less when doing merge when succeeded
|
||||
- Mark inline difference between old and new paths when a file is renamed
|
||||
- Support Akismet spam checking for creation of issues via API (Stan Hu)
|
||||
- API: Allow to set or update a merge-request's milestone (Kirill Skachkov)
|
||||
|
|
|
@ -19,8 +19,8 @@ module MergeRequests
|
|||
end
|
||||
|
||||
# Triggers the automatic merge of merge_request once the build succeeds
|
||||
def trigger(build)
|
||||
merge_requests = merge_request_from(build)
|
||||
def trigger(commit_status)
|
||||
merge_requests = merge_request_from(commit_status)
|
||||
|
||||
merge_requests.each do |merge_request|
|
||||
next unless merge_request.merge_when_build_succeeds?
|
||||
|
@ -45,9 +45,14 @@ module MergeRequests
|
|||
|
||||
private
|
||||
|
||||
def merge_request_from(build)
|
||||
merge_requests = @project.origin_merge_requests.opened.where(source_branch: build.ref).to_a
|
||||
merge_requests += @project.fork_merge_requests.opened.where(source_branch: build.ref).to_a
|
||||
def merge_request_from(commit_status)
|
||||
branches = commit_status.ref
|
||||
|
||||
# This is for ref-less builds
|
||||
branches ||= @project.repository.branch_names_contains(commit_status.sha)
|
||||
|
||||
merge_requests = @project.origin_merge_requests.opened.where(source_branch: branches).to_a
|
||||
merge_requests += @project.fork_merge_requests.opened.where(source_branch: branches).to_a
|
||||
|
||||
merge_requests.uniq.select(&:source_project)
|
||||
end
|
||||
|
|
|
@ -54,6 +54,7 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
|
|||
end
|
||||
|
||||
describe "#trigger" do
|
||||
context 'build with ref' do
|
||||
let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch, status: "success") }
|
||||
|
||||
it "merges all merge requests with merge when build succeeds enabled" do
|
||||
|
@ -63,6 +64,29 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
|
|||
expect(MergeWorker).to receive(:perform_async)
|
||||
service.trigger(build)
|
||||
end
|
||||
end
|
||||
|
||||
context 'commit status without ref' do
|
||||
let(:commit_status) { create(:generic_commit_status, status: 'success') }
|
||||
|
||||
it "doesn't merge a requests for status on other branch" do
|
||||
allow(project.repository).to receive(:branch_names_contains).with(commit_status.sha).and_return([])
|
||||
|
||||
expect(MergeWorker).to_not receive(:perform_async)
|
||||
service.trigger(commit_status)
|
||||
end
|
||||
|
||||
it 'discovers branches and merges all merge requests when status is success' do
|
||||
allow(project.repository).to receive(:branch_names_contains).
|
||||
with(commit_status.sha).and_return([mr_merge_if_green_enabled.source_branch])
|
||||
allow(ci_commit).to receive(:success?).and_return(true)
|
||||
allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
|
||||
allow(ci_commit).to receive(:success?).and_return(true)
|
||||
|
||||
expect(MergeWorker).to receive(:perform_async)
|
||||
service.trigger(commit_status)
|
||||
end
|
||||
end
|
||||
|
||||
context 'properly handles multiple stages' do
|
||||
let(:ref) { mr_merge_if_green_enabled.source_branch }
|
||||
|
|
Loading…
Reference in New Issue