Class: MergeRequests::PostMergeService

Inherits:
BaseService show all
Includes:
RemovesRefs
Defined in:
app/services/merge_requests/post_merge_service.rb

Overview

PostMergeService class

Mark existing merge request as merged and execute all hooks and notifications

Constant Summary collapse

MAX_RETARGET_MERGE_REQUESTS =
4
BATCH_SIZE =
100

Instance Attribute Summary

Attributes inherited from BaseContainerService

#container, #current_user, #group, #params, #project

Instance Method Summary collapse

Methods included from RemovesRefs

#cleanup_refs

Methods inherited from BaseService

#cancel_review_app_jobs!, #cleanup_environments, constructor_container_arg, #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 ErrorLogger

#log_error

Methods included from AssignsMergeParams

#assign_allowed_merge_params, included

Methods inherited from IssuableBaseService

constructor_container_arg

Methods inherited from BaseContainerService

#group_container?, #initialize, #namespace_container?, #project_container?, #project_group, #root_ancestor

Methods included from BaseServiceUtility

#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level

Methods included from Gitlab::Allowable

#can?, #can_all?, #can_any?

Constructor Details

This class inherits a constructor from MergeRequests::BaseService

Instance Method Details

#create_note(merge_request, source) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'app/services/merge_requests/post_merge_service.rb', line 52

def create_note(merge_request, source)
  SystemNoteService.change_status(
    merge_request,
    merge_request.target_project,
    current_user,
    merge_request.state,
    source
  )
end

#execute(merge_request, source = nil) ⇒ Object



15
16
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
43
44
45
46
47
48
49
50
# File 'app/services/merge_requests/post_merge_service.rb', line 15

def execute(merge_request, source = nil)
  return if merge_request.merged?

  # Mark the merge request as merged, everything that happens afterwards is
  # executed once
  unless merge_request.mark_as_merged
    Gitlab::AppLogger.warn(
      message: 'Failed to mark merge request as merged',
      merge_request_id: merge_request.id,
      merge_request_iid: merge_request.iid,
      project_id: merge_request.project_id,
      delete_source_branch: params[:delete_source_branch],
      errors: merge_request.errors.full_messages
    )
  end

  create_event(merge_request)
  todo_service.merge_merge_request(merge_request, current_user)

  merge_request_activity_counter.track_merge_mr_action(user: current_user)

  create_note(merge_request, source)
  close_issues(merge_request)
  notification_service.merge_mr(merge_request, current_user)
  invalidate_all_users_cache_count(merge_request)
  merge_request.invalidate_project_counter_caches
  delete_non_latest_diffs(merge_request)
  cancel_review_app_jobs!(merge_request)
  cleanup_environments(merge_request)
  cleanup_refs(merge_request)
  deactivate_pages_deployments(merge_request)
  cancel_auto_merges_targeting_source_branch(merge_request)
  trigger_user_merge_request_updated(merge_request)

  execute_hooks(merge_request, 'merge')
end