diff options
Diffstat (limited to 'app/services/merge_requests')
26 files changed, 155 insertions, 96 deletions
diff --git a/app/services/merge_requests/add_context_service.rb b/app/services/merge_requests/add_context_service.rb index 77b00f645c9..7b441ddf5e4 100644 --- a/app/services/merge_requests/add_context_service.rb +++ b/app/services/merge_requests/add_context_service.rb @@ -50,7 +50,7 @@ module MergeRequests def duplicates existing_oids = merge_request.merge_request_context_commits.map { |commit| commit.sha.to_s } existing_oids.select do |existing_oid| - commit_ids.select { |commit_id| existing_oid.start_with?(commit_id) }.count > 0 + commit_ids.count { |commit_id| existing_oid.start_with?(commit_id) } > 0 end end diff --git a/app/services/merge_requests/add_spent_time_service.rb b/app/services/merge_requests/add_spent_time_service.rb new file mode 100644 index 00000000000..ae79645a96a --- /dev/null +++ b/app/services/merge_requests/add_spent_time_service.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module MergeRequests + class AddSpentTimeService < UpdateService + def execute(merge_request) + old_associations = { total_time_spent: merge_request.total_time_spent } + + merge_request.spend_time(params[:spend_time]) + + merge_request_saved = merge_request.with_transaction_returning_status do + merge_request.save + end + + if merge_request_saved + create_system_notes(merge_request) + + # track usage + track_time_spend_edits(merge_request, old_associations[:total_time_spent]) + + execute_hooks(merge_request, 'update', old_associations: old_associations) + end + + merge_request + end + + private + + def track_time_spend_edits(merge_request, old_total_time_spent) + if old_total_time_spent != merge_request.total_time_spent + merge_request_activity_counter.track_time_spent_changed_action(user: current_user) + end + end + end +end diff --git a/app/services/merge_requests/after_create_service.rb b/app/services/merge_requests/after_create_service.rb index ed9747a8c99..77564521d45 100644 --- a/app/services/merge_requests/after_create_service.rb +++ b/app/services/merge_requests/after_create_service.rb @@ -35,9 +35,9 @@ module MergeRequests end def link_lfs_objects(merge_request) - LinkLfsObjectsService.new(merge_request.target_project).execute(merge_request) + LinkLfsObjectsService.new(project: merge_request.target_project).execute(merge_request) end end end -MergeRequests::AfterCreateService.prepend_if_ee('EE::MergeRequests::AfterCreateService') +MergeRequests::AfterCreateService.prepend_mod_with('MergeRequests::AfterCreateService') diff --git a/app/services/merge_requests/approval_service.rb b/app/services/merge_requests/approval_service.rb index 59d8f553eff..62e599e3e27 100644 --- a/app/services/merge_requests/approval_service.rb +++ b/app/services/merge_requests/approval_service.rb @@ -54,4 +54,4 @@ module MergeRequests end end -MergeRequests::ApprovalService.prepend_if_ee('EE::MergeRequests::ApprovalService') +MergeRequests::ApprovalService.prepend_mod_with('MergeRequests::ApprovalService') diff --git a/app/services/merge_requests/assign_issues_service.rb b/app/services/merge_requests/assign_issues_service.rb index e9107b9998e..f016c16e816 100644 --- a/app/services/merge_requests/assign_issues_service.rb +++ b/app/services/merge_requests/assign_issues_service.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module MergeRequests - class AssignIssuesService < BaseService + class AssignIssuesService < BaseProjectService def assignable_issues @assignable_issues ||= begin if current_user == merge_request.author @@ -16,7 +16,7 @@ module MergeRequests def execute assignable_issues.each do |issue| - Issues::UpdateService.new(issue.project, current_user, assignee_ids: [current_user.id]).execute(issue) + Issues::UpdateService.new(project: issue.project, current_user: current_user, params: { assignee_ids: [current_user.id] }).execute(issue) end { diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index 3a3765355d8..e94274aff9d 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -147,7 +147,7 @@ module MergeRequests if async MergeRequests::CreatePipelineWorker.perform_async(project.id, user.id, merge_request.id) else - MergeRequests::CreatePipelineService.new(project, user).execute(merge_request) + MergeRequests::CreatePipelineService.new(project: project, current_user: user).execute(merge_request) end end @@ -208,4 +208,4 @@ module MergeRequests end end -MergeRequests::BaseService.prepend_if_ee('EE::MergeRequests::BaseService') +MergeRequests::BaseService.prepend_mod_with('MergeRequests::BaseService') diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index ecc55eae5de..878e42172b7 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -300,4 +300,4 @@ module MergeRequests end end -MergeRequests::BuildService.prepend_if_ee('EE::MergeRequests::BuildService') +MergeRequests::BuildService.prepend_mod_with('MergeRequests::BuildService') diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index b43e697d3ab..12fc828b194 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -2,16 +2,28 @@ module MergeRequests class CreateFromIssueService < MergeRequests::CreateService - def initialize(project, user, params) + # TODO: This constructor does not use the "params:" argument from the superclass, + # but instead has a custom "mr_params:" argument. This is because historically, + # prior to named arguments being introduced to the constructor, it never passed + # along the third positional argument when calling `super`. + # This should be changed, in order to be consistent (all subclasses should pass + # along all of the arguments to the superclass, otherwise it is probably not an + # "is a" relationship). However, we need to be sure that passing the params + # argument to `super` (especially target_project_id) will not cause any unexpected + # behavior in the superclass. Since the addition of the named arguments is + # intended to be a low-risk pure refactor, we will defer this fix + # to this follow-on issue: + # https://gitlab.com/gitlab-org/gitlab/-/issues/328726 + def initialize(project:, current_user:, mr_params: {}) # branch - the name of new branch # ref - the source of new branch. - @branch_name = params[:branch_name] - @issue_iid = params[:issue_iid] - @ref = params[:ref] - @target_project_id = params[:target_project_id] + @branch_name = mr_params[:branch_name] + @issue_iid = mr_params[:issue_iid] + @ref = mr_params[:ref] + @target_project_id = mr_params[:target_project_id] - super(project, user) + super(project: project, current_user: current_user) end def execute @@ -73,11 +85,11 @@ module MergeRequests end def default_branch - target_project.default_branch || 'master' + target_project.default_branch_or_main end def merge_request - MergeRequests::BuildService.new(target_project, current_user, merge_request_params).execute + MergeRequests::BuildService.new(project: target_project, current_user: current_user, params: merge_request_params).execute end def merge_request_params diff --git a/app/services/merge_requests/create_pipeline_service.rb b/app/services/merge_requests/create_pipeline_service.rb index 46c4c102091..ebeba0ee5b8 100644 --- a/app/services/merge_requests/create_pipeline_service.rb +++ b/app/services/merge_requests/create_pipeline_service.rb @@ -63,4 +63,4 @@ module MergeRequests end end -MergeRequests::CreatePipelineService.prepend_if_ee('EE::MergeRequests::CreatePipelineService') +MergeRequests::CreatePipelineService.prepend_mod_with('MergeRequests::CreatePipelineService') diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb index 8186472ec65..c1292d924b2 100644 --- a/app/services/merge_requests/create_service.rb +++ b/app/services/merge_requests/create_service.rb @@ -53,4 +53,4 @@ module MergeRequests end end -MergeRequests::CreateService.include_if_ee('EE::MergeRequests::CreateService') +MergeRequests::CreateService.include_mod_with('MergeRequests::CreateService') diff --git a/app/services/merge_requests/get_urls_service.rb b/app/services/merge_requests/get_urls_service.rb index de3f2acdf63..7996fcb5273 100644 --- a/app/services/merge_requests/get_urls_service.rb +++ b/app/services/merge_requests/get_urls_service.rb @@ -1,13 +1,7 @@ # frozen_string_literal: true module MergeRequests - class GetUrlsService < BaseService - attr_reader :project - - def initialize(project) - @project = project - end - + class GetUrlsService < BaseProjectService def execute(changes) return [] unless project&.printing_merge_request_link_enabled diff --git a/app/services/merge_requests/handle_assignees_change_service.rb b/app/services/merge_requests/handle_assignees_change_service.rb index 77ff0791eb4..9ac386110f7 100644 --- a/app/services/merge_requests/handle_assignees_change_service.rb +++ b/app/services/merge_requests/handle_assignees_change_service.rb @@ -3,17 +3,13 @@ module MergeRequests class HandleAssigneesChangeService < MergeRequests::BaseService def async_execute(merge_request, old_assignees, options = {}) - if Feature.enabled?(:async_handle_merge_request_assignees_change, merge_request.target_project, default_enabled: :yaml) - MergeRequests::HandleAssigneesChangeWorker - .perform_async( - merge_request.id, - current_user.id, - old_assignees.map(&:id), - options - ) - else - execute(merge_request, old_assignees, options) - end + MergeRequests::HandleAssigneesChangeWorker + .perform_async( + merge_request.id, + current_user.id, + old_assignees.map(&:id), + options + ) end def execute(merge_request, old_assignees, options = {}) @@ -40,4 +36,4 @@ module MergeRequests end end -MergeRequests::HandleAssigneesChangeService.prepend_if_ee('EE::MergeRequests::HandleAssigneesChangeService') +MergeRequests::HandleAssigneesChangeService.prepend_mod_with('MergeRequests::HandleAssigneesChangeService') diff --git a/app/services/merge_requests/link_lfs_objects_service.rb b/app/services/merge_requests/link_lfs_objects_service.rb index 191da594095..4981d3efcae 100644 --- a/app/services/merge_requests/link_lfs_objects_service.rb +++ b/app/services/merge_requests/link_lfs_objects_service.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module MergeRequests - class LinkLfsObjectsService < ::BaseService + class LinkLfsObjectsService < ::BaseProjectService def execute(merge_request, oldrev: merge_request.diff_base_sha, newrev: merge_request.diff_head_sha) return if merge_request.source_project == project return if no_changes?(oldrev, newrev) diff --git a/app/services/merge_requests/merge_base_service.rb b/app/services/merge_requests/merge_base_service.rb index fe09c92aab9..3b9d3bccacf 100644 --- a/app/services/merge_requests/merge_base_service.rb +++ b/app/services/merge_requests/merge_base_service.rb @@ -61,7 +61,7 @@ module MergeRequests def squash_sha! params[:merge_request] = merge_request - squash_result = ::MergeRequests::SquashService.new(project, current_user, params).execute + squash_result = ::MergeRequests::SquashService.new(project: project, current_user: current_user, params: params).execute case squash_result[:status] when :success @@ -73,4 +73,4 @@ module MergeRequests end end -MergeRequests::MergeBaseService.prepend_if_ee('EE::MergeRequests::MergeBaseService') +MergeRequests::MergeBaseService.prepend_mod_with('MergeRequests::MergeBaseService') diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index 27f474b0fe7..5e7eee4f1c3 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -8,16 +8,22 @@ module MergeRequests # Executed when you do merge via GitLab UI # class MergeService < MergeRequests::MergeBaseService + include Gitlab::Utils::StrongMemoize + GENERIC_ERROR_MESSAGE = 'An error occurred while merging' + LEASE_TIMEOUT = 15.minutes.to_i delegate :merge_jid, :state, to: :@merge_request def execute(merge_request, options = {}) if project.merge_requests_ff_only_enabled && !self.is_a?(FfMergeService) - FfMergeService.new(project, current_user, params).execute(merge_request) + FfMergeService.new(project: project, current_user: current_user, params: params).execute(merge_request) return end + return if merge_request.merged? + return unless exclusive_lease(merge_request.id).try_obtain + @merge_request = merge_request @options = options @@ -34,6 +40,8 @@ module MergeRequests log_info("Merge process finished on JID #{merge_jid} with state #{state}") rescue MergeError => e handle_merge_error(log_message: e.message, save_message_on_model: true) + ensure + exclusive_lease(merge_request.id).cancel end private @@ -96,14 +104,14 @@ module MergeRequests rescue Gitlab::Git::PreReceiveError => e raise MergeError, "Something went wrong during merge pre-receive hook. #{e.message}".strip - rescue => e + rescue StandardError => e handle_merge_error(log_message: e.message) raise_error(GENERIC_ERROR_MESSAGE) end def after_merge log_info("Post merge started on JID #{merge_jid} with state #{state}") - MergeRequests::PostMergeService.new(project, current_user).execute(merge_request) + MergeRequests::PostMergeService.new(project: project, current_user: current_user).execute(merge_request) log_info("Post merge finished on JID #{merge_jid} with state #{state}") if delete_source_branch? @@ -146,5 +154,13 @@ module MergeRequests # loaded from the database they're strings params.with_indifferent_access[:sha] == merge_request.diff_head_sha end + + def exclusive_lease(merge_request_id) + strong_memoize(:"exclusive_lease_#{merge_request_id}") do + lease_key = ['merge_requests_merge_service', merge_request_id].join(':') + + Gitlab::ExclusiveLease.new(lease_key, timeout: LEASE_TIMEOUT) + end + end end end diff --git a/app/services/merge_requests/mergeability_check_service.rb b/app/services/merge_requests/mergeability_check_service.rb index 9fecab85cc1..3e294aeaa07 100644 --- a/app/services/merge_requests/mergeability_check_service.rb +++ b/app/services/merge_requests/mergeability_check_service.rb @@ -157,7 +157,7 @@ module MergeRequests def merge_to_ref params = { allow_conflicts: Feature.enabled?(:display_merge_conflicts_in_diff, project) } - result = MergeRequests::MergeToRefService.new(project, merge_request.author, params).execute(merge_request) + result = MergeRequests::MergeToRefService.new(project: project, current_user: merge_request.author, params: params).execute(merge_request) result[:status] == :success end diff --git a/app/services/merge_requests/post_merge_service.rb b/app/services/merge_requests/post_merge_service.rb index 4d7d632ee14..ea3071b3c2d 100644 --- a/app/services/merge_requests/post_merge_service.rb +++ b/app/services/merge_requests/post_merge_service.rb @@ -12,20 +12,28 @@ module MergeRequests MAX_RETARGET_MERGE_REQUESTS = 4 def execute(merge_request) + return if merge_request.merged? + + # Mark the merge request as merged, everything that happens afterwards is + # executed once merge_request.mark_as_merged - close_issues(merge_request) - todo_service.merge_merge_request(merge_request, current_user) + create_event(merge_request) - create_note(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) + close_issues(merge_request) notification_service.merge_mr(merge_request, current_user) - execute_hooks(merge_request, 'merge') invalidate_cache_counts(merge_request, users: merge_request.assignees | merge_request.reviewers) merge_request.update_project_counter_caches delete_non_latest_diffs(merge_request) cancel_review_app_jobs!(merge_request) cleanup_environments(merge_request) cleanup_refs(merge_request) + + execute_hooks(merge_request, 'merge') end private @@ -36,7 +44,7 @@ module MergeRequests closed_issues = merge_request.visible_closing_issues_for(current_user) closed_issues.each do |issue| - Issues::CloseService.new(project, current_user).execute(issue, commit: merge_request) + Issues::CloseService.new(project: project, current_user: current_user).execute(issue, commit: merge_request) end end @@ -59,4 +67,4 @@ module MergeRequests end end -MergeRequests::PostMergeService.prepend_if_ee('EE::MergeRequests::PostMergeService') +MergeRequests::PostMergeService.prepend_mod_with('MergeRequests::PostMergeService') diff --git a/app/services/merge_requests/push_options_handler_service.rb b/app/services/merge_requests/push_options_handler_service.rb index 05ec87c7d60..cc1e08e1606 100644 --- a/app/services/merge_requests/push_options_handler_service.rb +++ b/app/services/merge_requests/push_options_handler_service.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true module MergeRequests - class PushOptionsHandlerService + class PushOptionsHandlerService < ::BaseProjectService LIMIT = 10 - attr_reader :current_user, :errors, :changes, - :project, :push_options, :target_project + attr_reader :errors, :changes, + :push_options, :target_project + + def initialize(project:, current_user:, params: {}, changes:, push_options:) + super(project: project, current_user: current_user, params: params) - def initialize(project, current_user, changes, push_options) - @project = project @target_project = @project.default_merge_request_target - @current_user = current_user @changes = Gitlab::ChangesList.new(changes) @push_options = push_options @errors = [] @@ -95,16 +95,16 @@ module MergeRequests # Use BuildService to assign the standard attributes of a merge request merge_request = ::MergeRequests::BuildService.new( - project, - current_user, - create_params(branch) + project: project, + current_user: current_user, + params: create_params(branch) ).execute unless merge_request.errors.present? merge_request = ::MergeRequests::CreateService.new( - project, - current_user, - merge_request.attributes.merge(assignees: merge_request.assignees, + project: project, + current_user: current_user, + params: merge_request.attributes.merge(assignees: merge_request.assignees, label_ids: merge_request.label_ids) ).execute end @@ -114,9 +114,9 @@ module MergeRequests def update!(merge_request) merge_request = ::MergeRequests::UpdateService.new( - target_project, - current_user, - update_params(merge_request) + project: target_project, + current_user: current_user, + params: update_params(merge_request) ).execute(merge_request) collect_errors_from_merge_request(merge_request) unless merge_request.valid? diff --git a/app/services/merge_requests/rebase_service.rb b/app/services/merge_requests/rebase_service.rb index 87808a21a15..ae8398e2335 100644 --- a/app/services/merge_requests/rebase_service.rb +++ b/app/services/merge_requests/rebase_service.rb @@ -27,7 +27,7 @@ module MergeRequests repository.rebase(current_user, merge_request, skip_ci: @skip_ci) true - rescue => e + rescue StandardError => e log_error(exception: e, message: REBASE_ERROR, save_message_on_model: true) false diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb index e04c5168cef..d5e2595a9c6 100644 --- a/app/services/merge_requests/refresh_service.rb +++ b/app/services/merge_requests/refresh_service.rb @@ -62,7 +62,7 @@ module MergeRequests # the latest diff state as the last _valid_ one. merge_requests_for_source_branch.reject(&:source_branch_exists?).each do |mr| MergeRequests::CloseService - .new(mr.target_project, @current_user) + .new(project: mr.target_project, current_user: @current_user) .execute(mr) end end @@ -96,7 +96,7 @@ module MergeRequests merge_request.merge_commit_sha = analyzer.get_merge_commit(merge_request.diff_head_sha) MergeRequests::PostMergeService - .new(merge_request.target_project, @current_user) + .new(project: merge_request.target_project, current_user: @current_user) .execute(merge_request) end end @@ -109,7 +109,7 @@ module MergeRequests merge_requests_for_forks.find_each do |mr| LinkLfsObjectsService - .new(mr.target_project) + .new(project: mr.target_project) .execute(mr, oldrev: @push.oldrev, newrev: @push.newrev) end end @@ -162,12 +162,7 @@ module MergeRequests end def refresh_pipelines_on_merge_requests(merge_request) - if Feature.enabled?(:code_review_async_pipeline_creation, project, default_enabled: :yaml) - create_pipeline_for(merge_request, current_user, async: true) - else - create_pipeline_for(merge_request, current_user, async: false) - UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id) - end + create_pipeline_for(merge_request, current_user, async: true) end def abort_auto_merges(merge_request) @@ -218,7 +213,7 @@ module MergeRequests # If the a commit no longer exists in this repo, gitlab_git throws # a Rugged::OdbError. This is fixed in https://gitlab.com/gitlab-org/gitlab_git/merge_requests/52 @commits = @project.repository.commits_between(common_ref, @push.newrev) if common_ref - rescue + rescue StandardError end elsif @push.branch_removed? # No commits for a deleted branch. @@ -309,4 +304,4 @@ module MergeRequests end end -MergeRequests::RefreshService.prepend_if_ee('EE::MergeRequests::RefreshService') +MergeRequests::RefreshService.prepend_mod_with('MergeRequests::RefreshService') diff --git a/app/services/merge_requests/remove_approval_service.rb b/app/services/merge_requests/remove_approval_service.rb index f2bf5de61c1..872e7e0c89c 100644 --- a/app/services/merge_requests/remove_approval_service.rb +++ b/app/services/merge_requests/remove_approval_service.rb @@ -41,4 +41,4 @@ module MergeRequests end end -MergeRequests::RemoveApprovalService.prepend_if_ee('EE::MergeRequests::RemoveApprovalService') +MergeRequests::RemoveApprovalService.prepend_mod_with('MergeRequests::RemoveApprovalService') diff --git a/app/services/merge_requests/resolve_todos_service.rb b/app/services/merge_requests/resolve_todos_service.rb index 0010b596eee..2d322a7de30 100644 --- a/app/services/merge_requests/resolve_todos_service.rb +++ b/app/services/merge_requests/resolve_todos_service.rb @@ -10,11 +10,7 @@ module MergeRequests end def async_execute - if Feature.enabled?(:resolve_merge_request_todos_async, merge_request.target_project, default_enabled: :yaml) - MergeRequests::ResolveTodosWorker.perform_async(merge_request.id, user.id) - else - execute - end + MergeRequests::ResolveTodosWorker.perform_async(merge_request.id, user.id) end def execute diff --git a/app/services/merge_requests/retarget_chain_service.rb b/app/services/merge_requests/retarget_chain_service.rb index e8101e447d2..dab6e198979 100644 --- a/app/services/merge_requests/retarget_chain_service.rb +++ b/app/services/merge_requests/retarget_chain_service.rb @@ -24,9 +24,11 @@ module MergeRequests next unless can?(current_user, :update_merge_request, other_merge_request.source_project) ::MergeRequests::UpdateService - .new(other_merge_request.source_project, current_user, - target_branch: merge_request.target_branch, - target_branch_was_deleted: true) + .new(project: other_merge_request.source_project, current_user: current_user, + params: { + target_branch: merge_request.target_branch, + target_branch_was_deleted: true + }) .execute(other_merge_request) end end diff --git a/app/services/merge_requests/squash_service.rb b/app/services/merge_requests/squash_service.rb index faa2e921581..31c49b3ae70 100644 --- a/app/services/merge_requests/squash_service.rb +++ b/app/services/merge_requests/squash_service.rb @@ -29,7 +29,7 @@ module MergeRequests squash_sha = repository.squash(current_user, merge_request, message || merge_request.default_squash_commit_message) success(squash_sha: squash_sha) - rescue => e + rescue StandardError => e log_error(exception: e, message: 'Failed to squash merge request') false @@ -37,7 +37,7 @@ module MergeRequests def squash_in_progress? merge_request.squash_in_progress? - rescue => e + rescue StandardError => e log_error(exception: e, message: 'Failed to check squash in progress') raise SquashInProgressError, e.message diff --git a/app/services/merge_requests/update_assignees_service.rb b/app/services/merge_requests/update_assignees_service.rb index b339a644e8c..f99db35fd49 100644 --- a/app/services/merge_requests/update_assignees_service.rb +++ b/app/services/merge_requests/update_assignees_service.rb @@ -20,7 +20,7 @@ module MergeRequests # Defer the more expensive operations (handle_assignee_changes) to the background MergeRequests::HandleAssigneesChangeService - .new(project, current_user) + .new(project: project, current_user: current_user) .async_execute(merge_request, old_assignees, execute_hooks: true) merge_request @@ -45,7 +45,7 @@ module MergeRequests end def assignee_ids - params.fetch(:assignee_ids).first(1) + params.fetch(:assignee_ids).reject { _1 == 0 }.first(1) end def params @@ -61,4 +61,4 @@ module MergeRequests end end -MergeRequests::UpdateAssigneesService.prepend_if_ee('EE::MergeRequests::UpdateAssigneesService') +MergeRequests::UpdateAssigneesService.prepend_mod_with('MergeRequests::UpdateAssigneesService') diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 8995c5f2411..b613d88aee4 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -4,7 +4,7 @@ module MergeRequests class UpdateService < MergeRequests::BaseService extend ::Gitlab::Utils::Override - def initialize(project, user = nil, params = {}) + def initialize(project:, current_user: nil, params: {}) super @target_branch_was_deleted = @params.delete(:target_branch_was_deleted) @@ -222,7 +222,7 @@ module MergeRequests def handle_assignees_change(merge_request, old_assignees) MergeRequests::HandleAssigneesChangeService - .new(project, current_user) + .new(project: project, current_user: current_user) .async_execute(merge_request, old_assignees) end @@ -295,6 +295,8 @@ module MergeRequests case attribute when :assignee_ids assignees_service.execute(merge_request) + when :spend_time + add_time_spent_service.execute(merge_request) else nil end @@ -302,9 +304,13 @@ module MergeRequests def assignees_service @assignees_service ||= ::MergeRequests::UpdateAssigneesService - .new(project, current_user, params) + .new(project: project, current_user: current_user, params: params) + end + + def add_time_spent_service + @add_time_spent_service ||= ::MergeRequests::AddSpentTimeService.new(project: project, current_user: current_user, params: params) end end end -MergeRequests::UpdateService.prepend_if_ee('EE::MergeRequests::UpdateService') +MergeRequests::UpdateService.prepend_mod_with('MergeRequests::UpdateService') |