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:
Diffstat (limited to 'app/services/merge_requests/mergeability')
-rw-r--r--app/services/merge_requests/mergeability/check_base_service.rb18
-rw-r--r--app/services/merge_requests/mergeability/check_broken_status_service.rb10
-rw-r--r--app/services/merge_requests/mergeability/check_ci_status_service.rb10
-rw-r--r--app/services/merge_requests/mergeability/check_conflict_status_service.rb27
-rw-r--r--app/services/merge_requests/mergeability/check_discussions_status_service.rb10
-rw-r--r--app/services/merge_requests/mergeability/check_draft_status_service.rb12
-rw-r--r--app/services/merge_requests/mergeability/check_open_status_service.rb10
-rw-r--r--app/services/merge_requests/mergeability/check_rebase_status_service.rb27
-rw-r--r--app/services/merge_requests/mergeability/detailed_merge_status_service.rb8
-rw-r--r--app/services/merge_requests/mergeability/run_checks_service.rb34
10 files changed, 116 insertions, 50 deletions
diff --git a/app/services/merge_requests/mergeability/check_base_service.rb b/app/services/merge_requests/mergeability/check_base_service.rb
index e614a7c27fe..e1c4d751296 100644
--- a/app/services/merge_requests/mergeability/check_base_service.rb
+++ b/app/services/merge_requests/mergeability/check_base_service.rb
@@ -9,6 +9,10 @@ module MergeRequests
@params = params
end
+ def self.identifier
+ failure_reason
+ end
+
def skip?
raise NotImplementedError
end
@@ -24,12 +28,22 @@ module MergeRequests
private
+ def failure_reason
+ self.class.failure_reason
+ end
+
def success(**args)
- Gitlab::MergeRequests::Mergeability::CheckResult.success(payload: args)
+ Gitlab::MergeRequests::Mergeability::CheckResult
+ .success(payload: default_payload(args))
end
def failure(**args)
- Gitlab::MergeRequests::Mergeability::CheckResult.failed(payload: args)
+ Gitlab::MergeRequests::Mergeability::CheckResult
+ .failed(payload: default_payload(args))
+ end
+
+ def default_payload(args)
+ args.merge(identifier: self.class.identifier)
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_broken_status_service.rb b/app/services/merge_requests/mergeability/check_broken_status_service.rb
index 6fe4eb4a57f..25293c53bb5 100644
--- a/app/services/merge_requests/mergeability/check_broken_status_service.rb
+++ b/app/services/merge_requests/mergeability/check_broken_status_service.rb
@@ -2,6 +2,10 @@
module MergeRequests
module Mergeability
class CheckBrokenStatusService < CheckBaseService
+ def self.failure_reason
+ :broken_status
+ end
+
def execute
if merge_request.broken?
failure(reason: failure_reason)
@@ -17,12 +21,6 @@ module MergeRequests
def cacheable?
false
end
-
- private
-
- def failure_reason
- :broken_status
- end
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_ci_status_service.rb b/app/services/merge_requests/mergeability/check_ci_status_service.rb
index 9e09b513c57..f7fa3259d97 100644
--- a/app/services/merge_requests/mergeability/check_ci_status_service.rb
+++ b/app/services/merge_requests/mergeability/check_ci_status_service.rb
@@ -2,6 +2,10 @@
module MergeRequests
module Mergeability
class CheckCiStatusService < CheckBaseService
+ def self.failure_reason
+ :ci_must_pass
+ end
+
def execute
if merge_request.mergeable_ci_state?
success
@@ -17,12 +21,6 @@ module MergeRequests
def cacheable?
false
end
-
- private
-
- def failure_reason
- :ci_must_pass
- end
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_conflict_status_service.rb b/app/services/merge_requests/mergeability/check_conflict_status_service.rb
new file mode 100644
index 00000000000..2bc253322c9
--- /dev/null
+++ b/app/services/merge_requests/mergeability/check_conflict_status_service.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module MergeRequests
+ module Mergeability
+ class CheckConflictStatusService < CheckBaseService
+ def self.failure_reason
+ :conflict
+ end
+
+ def execute
+ if merge_request.can_be_merged?
+ success
+ else
+ failure(reason: failure_reason)
+ end
+ end
+
+ def skip?
+ false
+ end
+
+ def cacheable?
+ false
+ end
+ end
+ end
+end
diff --git a/app/services/merge_requests/mergeability/check_discussions_status_service.rb b/app/services/merge_requests/mergeability/check_discussions_status_service.rb
index 3421d96e8ae..34db5f8a944 100644
--- a/app/services/merge_requests/mergeability/check_discussions_status_service.rb
+++ b/app/services/merge_requests/mergeability/check_discussions_status_service.rb
@@ -2,6 +2,10 @@
module MergeRequests
module Mergeability
class CheckDiscussionsStatusService < CheckBaseService
+ def self.failure_reason
+ :discussions_not_resolved
+ end
+
def execute
if merge_request.mergeable_discussions_state?
success
@@ -17,12 +21,6 @@ module MergeRequests
def cacheable?
false
end
-
- private
-
- def failure_reason
- :discussions_not_resolved
- end
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_draft_status_service.rb b/app/services/merge_requests/mergeability/check_draft_status_service.rb
index a1524317155..85b67fdc629 100644
--- a/app/services/merge_requests/mergeability/check_draft_status_service.rb
+++ b/app/services/merge_requests/mergeability/check_draft_status_service.rb
@@ -3,6 +3,10 @@
module MergeRequests
module Mergeability
class CheckDraftStatusService < CheckBaseService
+ def self.failure_reason
+ :draft_status
+ end
+
def execute
if merge_request.draft?
failure(reason: failure_reason)
@@ -12,18 +16,12 @@ module MergeRequests
end
def skip?
- false
+ params[:skip_draft_check].present?
end
def cacheable?
false
end
-
- private
-
- def failure_reason
- :draft_status
- end
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_open_status_service.rb b/app/services/merge_requests/mergeability/check_open_status_service.rb
index 29f3d0d3ccb..f5b70f18394 100644
--- a/app/services/merge_requests/mergeability/check_open_status_service.rb
+++ b/app/services/merge_requests/mergeability/check_open_status_service.rb
@@ -3,6 +3,10 @@
module MergeRequests
module Mergeability
class CheckOpenStatusService < CheckBaseService
+ def self.failure_reason
+ :not_open
+ end
+
def execute
if merge_request.open?
success
@@ -18,12 +22,6 @@ module MergeRequests
def cacheable?
false
end
-
- private
-
- def failure_reason
- :not_open
- end
end
end
end
diff --git a/app/services/merge_requests/mergeability/check_rebase_status_service.rb b/app/services/merge_requests/mergeability/check_rebase_status_service.rb
new file mode 100644
index 00000000000..2163fec8bd6
--- /dev/null
+++ b/app/services/merge_requests/mergeability/check_rebase_status_service.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module MergeRequests
+ module Mergeability
+ class CheckRebaseStatusService < CheckBaseService
+ def self.failure_reason
+ :need_rebase
+ end
+
+ def execute
+ if merge_request.should_be_rebased?
+ failure(reason: failure_reason)
+ else
+ success
+ end
+ end
+
+ def skip?
+ params[:skip_rebase_check].present?
+ end
+
+ def cacheable?
+ false
+ end
+ end
+ end
+end
diff --git a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
index 987d6ce8e9f..86c8122604c 100644
--- a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
+++ b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb
@@ -24,7 +24,7 @@ module MergeRequests
ci_check_failure_reason
end
else
- check_results.failure_reason
+ check_results.payload[:failure_reason]
end
end
@@ -46,7 +46,11 @@ module MergeRequests
def check_results
strong_memoize(:check_results) do
- merge_request.execute_merge_checks(params: { skip_ci_check: true })
+ merge_request
+ .execute_merge_checks(
+ MergeRequest.mergeable_state_checks,
+ params: { skip_ci_check: true }
+ )
end
end
diff --git a/app/services/merge_requests/mergeability/run_checks_service.rb b/app/services/merge_requests/mergeability/run_checks_service.rb
index 740a6feac2c..5150c03d0a3 100644
--- a/app/services/merge_requests/mergeability/run_checks_service.rb
+++ b/app/services/merge_requests/mergeability/run_checks_service.rb
@@ -9,8 +9,8 @@ module MergeRequests
@params = params
end
- def execute
- @results = merge_request.mergeability_checks.each_with_object([]) do |check_class, result_hash|
+ def execute(checks, execute_all: false)
+ @results = checks.each_with_object([]) do |check_class, result_hash|
check = check_class.new(merge_request: merge_request, params: params)
next if check.skip?
@@ -21,24 +21,20 @@ module MergeRequests
result_hash << check_result
- break result_hash if check_result.failed?
+ break result_hash if check_result.failed? && !execute_all
end
logger.commit
- self
- end
-
- def success?
- raise 'Execute needs to be called before' if results.nil?
-
- results.all?(&:success?)
- end
-
- def failure_reason
- raise 'Execute needs to be called before' if results.nil?
+ return ServiceResponse.success(payload: { results: results }) if all_results_success?
- results.find(&:failed?)&.payload&.fetch(:reason)&.to_sym
+ ServiceResponse.error(
+ message: 'Checks failed.',
+ payload: {
+ results: results,
+ failure_reason: failure_reason
+ }
+ )
end
private
@@ -67,6 +63,14 @@ module MergeRequests
MergeRequests::Mergeability::Logger.new(merge_request: merge_request)
end
end
+
+ def all_results_success?
+ results.all?(&:success?)
+ end
+
+ def failure_reason
+ results.find(&:failed?)&.payload&.fetch(:reason)&.to_sym
+ end
end
end
end