Class: AutoMergeService
- Inherits:
-
BaseService
show all
- Includes:
- Gitlab::Utils::StrongMemoize
- Defined in:
- app/services/auto_merge_service.rb
Constant Summary
collapse
- STRATEGY_MERGE_WHEN_CHECKS_PASS =
'merge_when_checks_pass'
- STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS =
'add_to_merge_train_when_checks_pass'
- STRATEGIES =
[STRATEGY_MERGE_WHEN_CHECKS_PASS].freeze
Constants inherited
from BaseService
BaseService::UnauthorizedError
Instance Attribute Summary
Attributes inherited from BaseService
#current_user, #params, #project
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from BaseService
#initialize
#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level
#can?, #can_all?, #can_any?
Constructor Details
This class inherits a constructor from BaseService
Class Method Details
.all_strategies_ordered_by_preference ⇒ Object
12
13
14
|
# File 'app/services/auto_merge_service.rb', line 12
def all_strategies_ordered_by_preference
STRATEGIES
end
|
.get_service_class(strategy) ⇒ Object
16
17
18
19
20
|
# File 'app/services/auto_merge_service.rb', line 16
def get_service_class(strategy)
return unless all_strategies_ordered_by_preference.include?(strategy)
strategy_to_class_map[strategy]
end
|
.strategy_to_class_map ⇒ Object
Instance Method Details
#abort(merge_request, reason) ⇒ Object
62
63
64
65
66
67
68
|
# File 'app/services/auto_merge_service.rb', line 62
def abort(merge_request, reason)
return error("Can't abort the automatic merge", 406) unless merge_request.auto_merge_enabled?
perform_method(merge_request) do |instance|
instance.abort(merge_request, reason)
end
end
|
#available_strategies(merge_request) ⇒ Object
70
71
72
73
74
|
# File 'app/services/auto_merge_service.rb', line 70
def available_strategies(merge_request)
self.class.all_strategies_ordered_by_preference.select do |strategy|
auto_merge_service_instance(merge_request, strategy).available_for?(merge_request)
end
end
|
#cancel(merge_request) ⇒ Object
54
55
56
57
58
59
60
|
# File 'app/services/auto_merge_service.rb', line 54
def cancel(merge_request)
return error("Can't cancel the automatic merge", 406) unless merge_request.auto_merge_enabled?
perform_method(merge_request) do |instance|
instance.cancel(merge_request)
end
end
|
#execute(merge_request, strategy = nil) ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'app/services/auto_merge_service.rb', line 29
def execute(merge_request, strategy = nil)
strategy ||= preferred_strategy(merge_request)
instance = auto_merge_service_instance(merge_request, strategy)
return :failed unless instance&.available_for?(merge_request)
instance.execute(merge_request)
end
|
#preferred_strategy(merge_request) ⇒ Object
76
77
78
|
# File 'app/services/auto_merge_service.rb', line 76
def preferred_strategy(merge_request)
available_strategies(merge_request).first
end
|
#process(merge_request) ⇒ Object
46
47
48
49
50
51
52
|
# File 'app/services/auto_merge_service.rb', line 46
def process(merge_request)
return unless merge_request.auto_merge_enabled?
perform_method(merge_request) do |instance|
instance.process(merge_request)
end
end
|
#update(merge_request) ⇒ Object
38
39
40
41
42
43
44
|
# File 'app/services/auto_merge_service.rb', line 38
def update(merge_request)
return :failed unless merge_request.auto_merge_enabled?
perform_method(merge_request) do |instance|
instance.update(merge_request)
end
end
|