Skip to content
代码片段 群组 项目
未验证 提交 a95a460c 编辑于 作者: Eulyeon Ko's avatar Eulyeon Ko 提交者: GitLab
浏览文件

Merge branch 'revert-bb6773d2' into 'master'

Revert "Merge branch '431288-user-unassignment-note' into 'master'"

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143451



Merged-by: default avatarEulyeon Ko <5961404-euko@users.noreply.gitlab.com>
Approved-by: default avatarJessie Young <jessieyoung@gitlab.com>
No related branches found
No related tags found
无相关合并请求
...@@ -47,10 +47,10 @@ def mark_as_recursive_call ...@@ -47,10 +47,10 @@ def mark_as_recursive_call
def enqueue_jobs_that_needs_to_be_run_only_once_per_hierarchy(member, unassign_issuables) def enqueue_jobs_that_needs_to_be_run_only_once_per_hierarchy(member, unassign_issuables)
return if recursive_call? return if recursive_call?
enqueue_cleanup_jobs_once_per_hierarchy(member, unassign_issuables) enqueue_cleanup_jobs_once_per_heirarchy(member, unassign_issuables)
end end
def enqueue_cleanup_jobs_once_per_hierarchy(member, unassign_issuables) def enqueue_cleanup_jobs_once_per_heirarchy(member, unassign_issuables)
enqueue_delete_todos(member) enqueue_delete_todos(member)
enqueue_unassign_issuables(member) if unassign_issuables enqueue_unassign_issuables(member) if unassign_issuables
end end
......
...@@ -14,40 +14,10 @@ def execute ...@@ -14,40 +14,10 @@ def execute
project_ids = entity.is_a?(Group) ? entity.all_projects.select(:id) : [entity.id] project_ids = entity.is_a?(Group) ? entity.all_projects.select(:id) : [entity.id]
unassign_from_issues(project_ids) user.issue_assignees.on_issues(Issue.in_projects(project_ids).select(:id)).delete_all
unassign_from_merge_requests(project_ids) user.merge_request_assignees.in_projects(project_ids).delete_all
user.invalidate_cache_counts user.invalidate_cache_counts
end end
private
def unassign_from_issues(project_ids)
user.issue_assignees.on_issues(Issue.in_projects(project_ids)).select(:issue_id).each do |assignee|
issue = Issue.find(assignee.issue_id)
Issues::UpdateService.new(
container: issue.project,
current_user: user,
params: { assignee_ids: new_assignee_ids(issue) }
).execute(issue)
end
end
def unassign_from_merge_requests(project_ids)
user.merge_request_assignees.in_projects(project_ids).select(:merge_request_id).each do |assignee|
merge_request = MergeRequest.find(assignee.merge_request_id)
::MergeRequests::UpdateAssigneesService.new(
project: merge_request.project,
current_user: user,
params: { assignee_ids: new_assignee_ids(merge_request), skip_authorization: true }
).execute(merge_request)
end
end
def new_assignee_ids(issuable)
issuable.assignees.map(&:id) - [user.id]
end
end end
end end
...@@ -2,18 +2,12 @@ ...@@ -2,18 +2,12 @@
module MergeRequests module MergeRequests
class UpdateAssigneesService < UpdateService class UpdateAssigneesService < UpdateService
def initialize(project:, current_user: nil, params: {})
super
@skip_authorization = @params.delete(:skip_authorization) || false
end
# a stripped down service that only does what it must to update the # a stripped down service that only does what it must to update the
# assignees, and knows that it does not have to check for other updates. # assignees, and knows that it does not have to check for other updates.
# This saves a lot of queries for irrelevant things that cannot possibly # This saves a lot of queries for irrelevant things that cannot possibly
# change in the execution of this service. # change in the execution of this service.
def execute(merge_request) def execute(merge_request)
return merge_request unless current_user&.can?(:set_merge_request_metadata, merge_request) || skip_authorization return merge_request unless current_user&.can?(:set_merge_request_metadata, merge_request)
old_assignees = merge_request.assignees.to_a old_assignees = merge_request.assignees.to_a
old_ids = old_assignees.map(&:id) old_ids = old_assignees.map(&:id)
...@@ -39,8 +33,6 @@ def execute(merge_request) ...@@ -39,8 +33,6 @@ def execute(merge_request)
private private
attr_reader :skip_authorization
def assignee_ids def assignee_ids
filter_sentinel_values(params.fetch(:assignee_ids)).first(1) filter_sentinel_values(params.fetch(:assignee_ids)).first(1)
end end
......
...@@ -97,8 +97,8 @@ def cleanup_escalation_rules(member) ...@@ -97,8 +97,8 @@ def cleanup_escalation_rules(member)
::IncidentManagement::EscalationRules::DestroyService.new(escalation_rules: rules, user: member.user).execute ::IncidentManagement::EscalationRules::DestroyService.new(escalation_rules: rules, user: member.user).execute
end end
override :enqueue_cleanup_jobs_once_per_hierarchy override :enqueue_cleanup_jobs_once_per_heirarchy
def enqueue_cleanup_jobs_once_per_hierarchy(member, unassign_issuables) def enqueue_cleanup_jobs_once_per_heirarchy(member, unassign_issuables)
super super
enqueue_cleanup_add_on_seat_assignments(member) enqueue_cleanup_add_on_seat_assignments(member)
......
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
describe '#execute' do describe '#execute' do
RSpec.shared_examples 'un-assigning issuables' do |issue_count, mr_count, open_issue_count, open_mr_count| RSpec.shared_examples 'un-assigning issuables' do |issue_count, mr_count, open_issue_count, open_mr_count|
# :sidekiq_inline is used b/c unlike issues, assignee changes for MRs get handled asynchronously. it 'removes issuable assignments', :aggregate_failures do
it 'removes issuable assignments', :sidekiq_inline, :aggregate_failures do expect(user.assigned_issues.count).to eq(issue_count)
expect { subject } expect(user.assigned_merge_requests.count).to eq(mr_count)
.to change { user.assigned_issues.count }.from(issue_count).to(0)
.and change { user.assigned_merge_requests.count }.from(mr_count).to(0) subject
.and change { Note.where('note ILIKE ?', '%unassigned%').count }.by(
user.assigned_issues.count + user.assigned_merge_requests.count expect(user.assigned_issues.count).to eq(0)
) expect(user.assigned_merge_requests.count).to eq(0)
end end
it 'invalidates user cache', :aggregate_failures, :clean_gitlab_redis_cache do it 'invalidates user cache', :aggregate_failures, :clean_gitlab_redis_cache do
......
...@@ -143,16 +143,6 @@ def update_merge_request ...@@ -143,16 +143,6 @@ def update_merge_request
expect { update_merge_request } expect { update_merge_request }
.not_to change { merge_request.reload.assignees.to_a } .not_to change { merge_request.reload.assignees.to_a }
end end
context 'when skip_authorization is set' do
let(:opts) { { assignee_ids: [user2.id], skip_authorization: true } }
it 'updates the MR assignees' do
expect { update_merge_request }
.to change { merge_request.reload.assignees }
.from([user3]).to([user2])
end
end
end end
end end
end end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册