Class: MergeRequests::UpdateService
- Inherits:
-
BaseService
- Object
- BaseContainerService
- IssuableBaseService
- BaseService
- MergeRequests::UpdateService
- Extended by:
- Gitlab::Utils::Override
- Defined in:
- app/services/merge_requests/update_service.rb
Direct Known Subclasses
AddSpentTimeService, UpdateAssigneesService, UpdateReviewersService
Instance Attribute Summary
Attributes inherited from BaseContainerService
#container, #current_user, #group, #params, #project
Instance Method Summary collapse
- #after_update(merge_request, old_associations) ⇒ Object
- #close_service ⇒ Object
- #execute(merge_request) ⇒ Object
- #handle_changes(merge_request, options) ⇒ Object
- #handle_task_changes(merge_request) ⇒ Object
-
#initialize(project:, current_user: nil, params: {}) ⇒ UpdateService
constructor
A new instance of UpdateService.
- #reopen_service ⇒ Object
Methods included from Gitlab::Utils::Override
extended, extensions, included, method_added, override, prepended, queue_verification, verify!
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_reviewers_change, #hook_data, #inspect, #merge_request_activity_counter, #source_project, #target_project
Methods included from ErrorLogger
Methods included from AssignsMergeParams
#assign_allowed_merge_params, included
Methods inherited from BaseContainerService
#group_container?, #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
Constructor Details
#initialize(project:, current_user: nil, params: {}) ⇒ UpdateService
Returns a new instance of UpdateService.
7 8 9 10 11 |
# File 'app/services/merge_requests/update_service.rb', line 7 def initialize(project:, current_user: nil, params: {}) super @target_branch_was_deleted = @params.delete(:target_branch_was_deleted) end |
Instance Method Details
#after_update(merge_request, old_associations) ⇒ Object
77 78 79 80 81 82 |
# File 'app/services/merge_requests/update_service.rb', line 77 def after_update(merge_request, old_associations) super merge_request.cache_merge_request_closes_issues!(current_user) unless merge_request.auto_merge_enabled? @trigger_work_item_updated = true end |
#close_service ⇒ Object
73 74 75 |
# File 'app/services/merge_requests/update_service.rb', line 73 def close_service MergeRequests::CloseService end |
#execute(merge_request) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'app/services/merge_requests/update_service.rb', line 13 def execute(merge_request) if Gitlab::Utils.to_boolean(params[:draft]) merge_request.title = merge_request.draft_title end if params.key?(:merge_after) merge_after = params.delete(:merge_after) UpdateMergeScheduleService.new(merge_request, merge_after: merge_after).execute end update_merge_request_with_specialized_service(merge_request) || general_fallback(merge_request) end |
#handle_changes(merge_request, options) ⇒ Object
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 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/services/merge_requests/update_service.rb', line 26 def handle_changes(merge_request, ) super old_associations = .fetch(:old_associations, {}) old_labels = old_associations.fetch(:labels, []) old_mentioned_users = old_associations.fetch(:mentioned_users, []) old_assignees = old_associations.fetch(:assignees, []) old_reviewers = old_associations.fetch(:reviewers, []) old_timelogs = old_associations.fetch(:timelogs, []) changed_fields = merge_request.previous_changes.keys resolve_todos(merge_request, old_labels, old_assignees, old_reviewers) if merge_request.previous_changes.include?('title') || merge_request.previous_changes.include?('description') todo_service.update_merge_request(merge_request, current_user, old_mentioned_users) end handle_target_branch_change(merge_request) handle_draft_status_change(merge_request, changed_fields) track_title_and_desc_edits(changed_fields) track_discussion_lock_toggle(merge_request, changed_fields) track_time_estimate_and_spend_edits(merge_request, old_timelogs, changed_fields) track_labels_change(merge_request, old_labels) notify_if_labels_added(merge_request, old_labels) notify_if_mentions_added(merge_request, old_mentioned_users) # Since #mark_as_unchecked triggers an update action through the MR's # state machine, we want to push this as far down in the process so we # avoid resetting #ActiveModel::Dirty # if merge_request.previous_changes.include?('target_branch') || merge_request.previous_changes.include?('source_branch') merge_request.mark_as_unchecked unless merge_request.unchecked? end end |
#handle_task_changes(merge_request) ⇒ Object
64 65 66 67 |
# File 'app/services/merge_requests/update_service.rb', line 64 def handle_task_changes(merge_request) todo_service.resolve_todos_for_target(merge_request, current_user) todo_service.update_merge_request(merge_request, current_user) end |
#reopen_service ⇒ Object
69 70 71 |
# File 'app/services/merge_requests/update_service.rb', line 69 def reopen_service MergeRequests::ReopenService end |