Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/add_context_service.rb2
-rw-r--r--app/services/merge_requests/add_spent_time_service.rb34
-rw-r--r--app/services/merge_requests/after_create_service.rb4
-rw-r--r--app/services/merge_requests/approval_service.rb2
-rw-r--r--app/services/merge_requests/assign_issues_service.rb4
-rw-r--r--app/services/merge_requests/base_service.rb4
-rw-r--r--app/services/merge_requests/build_service.rb2
-rw-r--r--app/services/merge_requests/create_from_issue_service.rb28
-rw-r--r--app/services/merge_requests/create_pipeline_service.rb2
-rw-r--r--app/services/merge_requests/create_service.rb2
-rw-r--r--app/services/merge_requests/get_urls_service.rb8
-rw-r--r--app/services/merge_requests/handle_assignees_change_service.rb20
-rw-r--r--app/services/merge_requests/link_lfs_objects_service.rb2
-rw-r--r--app/services/merge_requests/merge_base_service.rb4
-rw-r--r--app/services/merge_requests/merge_service.rb22
-rw-r--r--app/services/merge_requests/mergeability_check_service.rb2
-rw-r--r--app/services/merge_requests/post_merge_service.rb20
-rw-r--r--app/services/merge_requests/push_options_handler_service.rb30
-rw-r--r--app/services/merge_requests/rebase_service.rb2
-rw-r--r--app/services/merge_requests/refresh_service.rb17
-rw-r--r--app/services/merge_requests/remove_approval_service.rb2
-rw-r--r--app/services/merge_requests/resolve_todos_service.rb6
-rw-r--r--app/services/merge_requests/retarget_chain_service.rb8
-rw-r--r--app/services/merge_requests/squash_service.rb4
-rw-r--r--app/services/merge_requests/update_assignees_service.rb6
-rw-r--r--app/services/merge_requests/update_service.rb14
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')