Class: MergeRequests::MergeService
- Inherits:
-
MergeBaseService
- Object
- BaseContainerService
- IssuableBaseService
- BaseService
- MergeBaseService
- MergeRequests::MergeService
- Includes:
- Gitlab::Utils::StrongMemoize
- Defined in:
- app/services/merge_requests/merge_service.rb
Overview
MergeService class
Do git merge and in case of success mark merge request as merged and execute all hooks and notifications Executed when you do merge via GitLab UI
Constant Summary collapse
- GENERIC_ERROR_MESSAGE =
'An error occurred while merging'
Constants inherited from MergeBaseService
MergeRequests::MergeBaseService::MergeError
Instance Attribute Summary
Attributes inherited from MergeBaseService
Attributes inherited from BaseContainerService
#container, #current_user, #group, #params, #project
Instance Method Summary collapse
Methods inherited from MergeBaseService
#hooks_validation_error, #hooks_validation_pass?
Methods inherited from BaseService
#cancel_review_app_jobs!, #cleanup_environments, #create_note, #deactivate_pages_deployments, #execute_external_hooks, #execute_group_mention_hooks, #execute_hooks, #handle_assignees_change, #handle_changes, #handle_reviewers_change, #hook_data, #initialize, #inspect, #merge_request_activity_counter, #source_project, #target_project
Methods included from Gitlab::Utils::Override
#extended, extensions, #included, #method_added, #override, #prepended, #queue_verification, verify!
Methods included from AssignsMergeParams
#assign_allowed_merge_params, included
Methods inherited from BaseContainerService
#group_container?, #initialize, #namespace_container?, #project_container?, #project_group, #root_ancestor
Methods included from BaseServiceUtility
#deny_visibility_level, #event_service, #notification_service, #system_hook_service, #todo_service, #visibility_level
Methods included from Gitlab::Allowable
Constructor Details
This class inherits a constructor from MergeRequests::BaseService
Instance Method Details
#execute(merge_request, options = {}) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/services/merge_requests/merge_service.rb', line 17 def execute(merge_request, = {}) return if merge_request.merged? return unless exclusive_lease(merge_request).try_obtain merge_strategy_class = [:merge_strategy] || MergeRequests::MergeStrategies::FromSourceBranch @merge_strategy = merge_strategy_class.new(merge_request, current_user, merge_params: params, options: ) @merge_request = merge_request @options = jid = merge_jid validate! merge_request.in_locked_state do if commit after_merge success end end log_info("Merge process finished on JID #{jid} with state #{state}") rescue MergeError, MergeRequests::MergeStrategies::StrategyError => e handle_merge_error(log_message: e., save_message_on_model: true) ensure exclusive_lease(merge_request).cancel end |