diff options
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7162ba08a76..4ed73d979ce 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -160,20 +160,25 @@ class MergeRequest < ApplicationRecord state_machine :merge_status, initial: :unchecked do event :mark_as_unchecked do - transition [:can_be_merged, :unchecked] => :unchecked + transition [:can_be_merged, :checking, :unchecked] => :unchecked transition [:cannot_be_merged, :cannot_be_merged_recheck] => :cannot_be_merged_recheck end + event :mark_as_checking do + transition [:unchecked, :cannot_be_merged_recheck] => :checking + end + event :mark_as_mergeable do - transition [:unchecked, :cannot_be_merged_recheck] => :can_be_merged + transition [:unchecked, :cannot_be_merged_recheck, :checking] => :can_be_merged end event :mark_as_unmergeable do - transition [:unchecked, :cannot_be_merged_recheck] => :cannot_be_merged + transition [:unchecked, :cannot_be_merged_recheck, :checking] => :cannot_be_merged end state :unchecked state :cannot_be_merged_recheck + state :checking state :can_be_merged state :cannot_be_merged @@ -191,7 +196,7 @@ class MergeRequest < ApplicationRecord # rubocop: enable CodeReuse/ServiceClass def check_state?(merge_status) - [:unchecked, :cannot_be_merged_recheck].include?(merge_status.to_sym) + [:unchecked, :cannot_be_merged_recheck, :checking].include?(merge_status.to_sym) end end @@ -812,10 +817,16 @@ class MergeRequest < ApplicationRecord MergeRequests::ReloadDiffsService.new(self, current_user).execute end - def check_mergeability + def check_mergeability(async: false) return if Feature.enabled?(:merge_requests_conditional_mergeability_check, default_enabled: true) && !recheck_merge_status? - MergeRequests::MergeabilityCheckService.new(self).execute(retry_lease: false) + check_service = MergeRequests::MergeabilityCheckService.new(self) + + if async && Feature.enabled?(:async_merge_request_check_mergeability, project) + check_service.async_execute + else + check_service.execute(retry_lease: false) + end end # rubocop: enable CodeReuse/ServiceClass |