diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2017-11-10 17:55:39 +0300 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2017-11-10 22:25:22 +0300 |
commit | 98baa929de998869095660474da0a89345d70993 (patch) | |
tree | 0255284124bcb20d612c85a6d12a8c6f4ecc8a78 /app | |
parent | 2758c79e198b87024b1e857f64e76709aceb4bd2 (diff) |
Merge branch 'issue_39773_be' into 'master'
Prevent fast forward merge when rebase is required
Closes #39773
See merge request gitlab-org/gitlab-ce!15296
(cherry picked from commit f7537ce03a29b1af85461b2883c33bb41b2382d5)
bddbb90f Prevent fast forward merge when rebase is required
Diffstat (limited to 'app')
-rw-r--r-- | app/services/merge_requests/merge_service.rb | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index 156e7b2f078..1da4dbd9e96 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -18,15 +18,7 @@ module MergeRequests @merge_request = merge_request - unless @merge_request.mergeable? - return handle_merge_error(log_message: 'Merge request is not mergeable', save_message_on_model: true) - end - - @source = find_merge_source - - unless @source - return handle_merge_error(log_message: 'No source for merge', save_message_on_model: true) - end + error_check! merge_request.in_locked_state do if commit @@ -41,6 +33,19 @@ module MergeRequests private + def error_check! + error = + if @merge_request.should_be_rebased? + 'Only fast-forward merge is allowed for your project. Please update your source branch' + elsif !@merge_request.mergeable? + 'Merge request is not mergeable' + elsif !source + 'No source for merge' + end + + raise MergeError, error if error + end + def commit message = params[:commit_message] || merge_request.merge_commit_message @@ -91,8 +96,8 @@ module MergeRequests merge_request.to_reference(full: true) end - def find_merge_source - merge_request.diff_head_sha + def source + @source ||= @merge_request.diff_head_sha end end end |