Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2019-05-31 23:18:27 +0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2019-06-01 01:16:01 +0300
commit4246a62118d919e62b94d75eba641ed374c3f241 (patch)
tree37ef42f76b66b642c88edf3f2a24da34a0f24047 /app/services/merge_requests
parent96db70a4448fd1e736c10100dccf3a803ec553c0 (diff)
Add payload to the service response
This introduces payload to the ServiceResponse with the merge ref HEAD commit data
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/mergeability_check_service.rb34
1 files changed, 31 insertions, 3 deletions
diff --git a/app/services/merge_requests/mergeability_check_service.rb b/app/services/merge_requests/mergeability_check_service.rb
index d277d38127c..ef833774e65 100644
--- a/app/services/merge_requests/mergeability_check_service.rb
+++ b/app/services/merge_requests/mergeability_check_service.rb
@@ -2,6 +2,8 @@
module MergeRequests
class MergeabilityCheckService < ::BaseService
+ include Gitlab::Utils::StrongMemoize
+
delegate :project, to: :@merge_request
delegate :repository, to: :project
@@ -16,8 +18,8 @@ module MergeRequests
# and the merge-ref is synced. Success in case of being/becoming mergeable,
# error otherwise.
def execute
- return ServiceResponse.error('Invalid argument') unless merge_request
- return ServiceResponse.error('Unsupported operation') if Gitlab::Database.read_only?
+ return ServiceResponse.error(message: 'Invalid argument') unless merge_request
+ return ServiceResponse.error(message: 'Unsupported operation') if Gitlab::Database.read_only?
update_merge_status
@@ -25,13 +27,39 @@ module MergeRequests
return ServiceResponse.error(message: 'Merge request is not mergeable')
end
- ServiceResponse.success
+ unless payload.fetch(:merge_ref_head)
+ return ServiceResponse.error(message: 'Merge ref was not found')
+ end
+
+ ServiceResponse.success(payload: payload)
end
private
attr_reader :merge_request
+ def payload
+ strong_memoize(:payload) do
+ {
+ merge_ref_head: merge_ref_head_payload
+ }
+ end
+ end
+
+ def merge_ref_head_payload
+ commit = merge_request.merge_ref_head
+
+ return unless commit
+
+ target_id, source_id = commit.parent_ids
+
+ {
+ commit_id: commit.id,
+ source_id: source_id,
+ target_id: target_id
+ }
+ end
+
def update_merge_status
return unless merge_request.recheck_merge_status?