summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-11-09 11:12:42 +0000
committerDouwe Maan <douwe@gitlab.com>2015-11-09 11:12:42 +0000
commit03b12ee5502e56b3cc9b14dfa92722f52ce41bce (patch)
treecc43d516cf4999d63011c5a4be501cb2e82cbf51
parent9f055126479000764b488cbb8e91733daaca1c36 (diff)
parent8f2561b193ad39f116655af0789798b45ad906c8 (diff)
downloadgitlab-ce-03b12ee5502e56b3cc9b14dfa92722f52ce41bce.tar.gz
Merge branch 'fix-commits-manual-merge' into 'master'
Fix bug where manually merged branches in a MR would end up with an empty diff This bug manifested in 8.1 with the refactoring of `RefreshService`. Here's what happens: 1. User create a new branch `foo`. 2. User creates a merge request for `foo`. 3. User merges `foo` into `master` by hand. 4. `RefreshService` reloads the merge request. Since `master` is equivalent to `foo`, this results in an empty diff. 5. `RefreshService` then closes the MR. This wasn't an issue when you use the normal "Accept Merge Request" flow because the act of clicking the button closes the merge request, so step 4 never happens. Closes #3314 See merge request !1758
-rw-r--r--CHANGELOG1
-rw-r--r--app/services/merge_requests/refresh_service.rb8
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb19
3 files changed, 24 insertions, 4 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 22012211164..19f288d0c7e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
Please view this file on the master branch, on stable branches it's out of date.
v 8.2.0 (unreleased)
+ - Fix bug where manually merged branches in a MR would end up with an empty diff (Stan Hu)
- Force update refs/merge-requests/X/head upon a push to the source branch of a merge request (Stan Hu)
- Improved performance of finding users by one of their Email addresses
- Improved performance of replacing references in comments
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index d68bc79ecc0..e180edb4bf3 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -7,17 +7,17 @@ module MergeRequests
@branch_name = Gitlab::Git.ref_name(ref)
find_new_commits
+ # Be sure to close outstanding MRs before reloading them to avoid generating an
+ # empty diff during a manual merge
+ close_merge_requests
reload_merge_requests
# Leave a system note if a branch was deleted/added
if branch_added? || branch_removed?
comment_mr_branch_presence_changed
- comment_mr_with_commits
- else
- comment_mr_with_commits
- close_merge_requests
end
+ comment_mr_with_commits
execute_mr_web_hooks
true
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 227ac995ec2..7ee4488521d 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -62,6 +62,25 @@ describe MergeRequests::RefreshService do
it { expect(@fork_merge_request.notes.last.note).to include('changed to merged') }
end
+ context 'manual merge of source branch' do
+ before do
+ # Merge master -> feature branch
+ author = { email: 'test@gitlab.com', time: Time.now, name: "Me" }
+ commit_options = { message: 'Test message', committer: author, author: author }
+ master_commit = @project.repository.commit('master')
+ @project.repository.merge(@user, master_commit.id, 'feature', commit_options)
+ commit = @project.repository.commit('feature')
+ service.new(@project, @user).execute(@oldrev, commit.id, 'refs/heads/feature')
+ reload_mrs
+ end
+
+ it { expect(@merge_request.notes.last.note).to include('changed to merged') }
+ it { expect(@merge_request).to be_merged }
+ it { expect(@merge_request.diffs.length).to be > 0 }
+ it { expect(@fork_merge_request).to be_merged }
+ it { expect(@fork_merge_request.notes.last.note).to include('changed to merged') }
+ end
+
context 'push to fork repo source branch' do
let(:refresh_service) { service.new(@fork_project, @user) }
before do