Commit 5550cba0 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'fix-mrs-merged-immediately' into 'master'

Don't mark empty MRs as merged on push to the target branch

Closes #32800

See merge request !12711
parents 820aeb4e 4209b647
...@@ -35,11 +35,12 @@ module MergeRequests ...@@ -35,11 +35,12 @@ module MergeRequests
# target branch manually # target branch manually
def close_merge_requests def close_merge_requests
commit_ids = @commits.map(&:id) commit_ids = @commits.map(&:id)
merge_requests = @project.merge_requests.opened.where(target_branch: @branch_name).to_a merge_requests = @project.merge_requests.preload(:merge_request_diff).opened.where(target_branch: @branch_name).to_a
merge_requests = merge_requests.select(&:diff_head_commit) merge_requests = merge_requests.select(&:diff_head_commit)
merge_requests = merge_requests.select do |merge_request| merge_requests = merge_requests.select do |merge_request|
commit_ids.include?(merge_request.diff_head_sha) commit_ids.include?(merge_request.diff_head_sha) &&
merge_request.merge_request_diff.state != 'empty'
end end
filter_merge_requests(merge_requests).each do |merge_request| filter_merge_requests(merge_requests).each do |merge_request|
......
---
title: Don't mark empty MRs as merged on push to the target branch
merge_request:
author:
...@@ -98,6 +98,7 @@ describe MergeRequests::RefreshService, services: true do ...@@ -98,6 +98,7 @@ describe MergeRequests::RefreshService, services: true do
end end
context 'push to origin repo target branch' do context 'push to origin repo target branch' do
context 'when all MRs to the target branch had diffs' do
before do before do
service.new(@project, @user).execute(@oldrev, @newrev, 'refs/heads/feature') service.new(@project, @user).execute(@oldrev, @newrev, 'refs/heads/feature')
reload_mrs reload_mrs
...@@ -113,6 +114,39 @@ describe MergeRequests::RefreshService, services: true do ...@@ -113,6 +114,39 @@ describe MergeRequests::RefreshService, services: true do
end end
end end
context 'when an MR to be closed was empty already' do
let!(:empty_fork_merge_request) do
create(:merge_request,
source_project: @fork_project,
source_branch: 'master',
target_branch: 'master',
target_project: @project)
end
before do
# This spec already has a fake push, so pretend that we were targeting
# feature all along.
empty_fork_merge_request.update_columns(target_branch: 'feature')
service.new(@project, @user).execute(@oldrev, @newrev, 'refs/heads/feature')
reload_mrs
empty_fork_merge_request.reload
end
it 'only updates the non-empty MRs' do
expect(@merge_request).to be_merged
expect(@merge_request.notes.last.note).to include('merged')
expect(@fork_merge_request).to be_merged
expect(@fork_merge_request.notes.last.note).to include('merged')
expect(empty_fork_merge_request).to be_open
expect(empty_fork_merge_request.merge_request_diff.state).to eq('empty')
expect(empty_fork_merge_request.notes).to be_empty
end
end
end
context 'manual merge of source branch' do context 'manual merge of source branch' do
before do before do
# Merge master -> feature branch # Merge master -> feature branch
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment