From b965009ddddcd50e76841dbc97d2767292e88a0a Mon Sep 17 00:00:00 2001 From: Oswaldo Ferreira Date: Tue, 21 May 2019 18:14:22 -0300 Subject: Automatically update MR merge-ref along merge status This couples the code that transitions the `MergeRequest#merge_status` and refs/merge-requests/:iid/merge ref update. In general, instead of directly telling `MergeToRefService` to update the merge ref, we should rely on `MergeabilityCheckService` to keep both the merge status and merge ref synced. Now, if the merge_status is `can_be_merged` it means the merge-ref is also updated to the latest. We've also updated the logic to be more systematic and less user-based. --- lib/api/entities.rb | 2 +- lib/api/merge_requests.rb | 24 ++++++------------------ 2 files changed, 7 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 4e99fec02dd..b1b6e7bd7b9 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -699,7 +699,7 @@ module API # See https://gitlab.com/gitlab-org/gitlab-ce/issues/42344 for more # information. expose :merge_status do |merge_request| - merge_request.check_if_can_be_merged + merge_request.check_mergeability merge_request.merge_status end expose :diff_head_sha, as: :sha diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index ce85772e4ed..59b5346ffbb 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -398,28 +398,16 @@ module API present merge_request, with: Entities::MergeRequest, current_user: current_user, project: user_project end - desc 'Merge a merge request to its default temporary merge ref path' - params do - optional :merge_commit_message, type: String, desc: 'Custom merge commit message' - end - put ':id/merge_requests/:merge_request_iid/merge_to_ref' do + desc 'Returns an up to date merge-ref HEAD' + get ':id/merge_requests/:merge_request_iid/merge_ref' do merge_request = find_project_merge_request(params[:merge_request_iid]) - authorize! :admin_merge_request, user_project - - merge_params = { - commit_message: params[:merge_commit_message] - } - - result = ::MergeRequests::MergeToRefService - .new(merge_request.target_project, current_user, merge_params) - .execute(merge_request) + result = merge_request.check_mergeability - if result[:status] == :success - present result.slice(:commit_id), 200 + if result.success? && commit = merge_request.merge_ref_head + present :commit_id, commit.sha else - http_status = result[:http_status] || 400 - render_api_error!(result[:message], http_status) + render_api_error!(result.message, 400) end end -- cgit v1.2.1 From 96db70a4448fd1e736c10100dccf3a803ec553c0 Mon Sep 17 00:00:00 2001 From: Oswaldo Ferreira Date: Thu, 30 May 2019 20:25:25 +0000 Subject: Simplify merge_ref_head methods --- lib/api/merge_requests.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index 59b5346ffbb..a1365d5c02b 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -398,11 +398,11 @@ module API present merge_request, with: Entities::MergeRequest, current_user: current_user, project: user_project end - desc 'Returns an up to date merge-ref HEAD' + desc 'Returns the up to date merge-ref HEAD commit' get ':id/merge_requests/:merge_request_iid/merge_ref' do merge_request = find_project_merge_request(params[:merge_request_iid]) - result = merge_request.check_mergeability + result = ::MergeRequests::MergeabilityCheckService.new(merge_request).execute if result.success? && commit = merge_request.merge_ref_head present :commit_id, commit.sha -- cgit v1.2.1 From 4246a62118d919e62b94d75eba641ed374c3f241 Mon Sep 17 00:00:00 2001 From: Oswaldo Ferreira Date: Fri, 31 May 2019 17:18:27 -0300 Subject: Add payload to the service response This introduces payload to the ServiceResponse with the merge ref HEAD commit data --- lib/api/merge_requests.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index a1365d5c02b..0a9fe450500 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -404,8 +404,8 @@ module API result = ::MergeRequests::MergeabilityCheckService.new(merge_request).execute - if result.success? && commit = merge_request.merge_ref_head - present :commit_id, commit.sha + if result.success? + present :commit_id, result.payload.dig(:merge_ref_head, :commit_id) else render_api_error!(result.message, 400) end -- cgit v1.2.1