diff options
Diffstat (limited to 'lib/gitlab/quick_actions/merge_request_actions.rb')
-rw-r--r-- | lib/gitlab/quick_actions/merge_request_actions.rb | 77 |
1 files changed, 76 insertions, 1 deletions
diff --git a/lib/gitlab/quick_actions/merge_request_actions.rb b/lib/gitlab/quick_actions/merge_request_actions.rb index cc2021e14e3..842d4ef482b 100644 --- a/lib/gitlab/quick_actions/merge_request_actions.rb +++ b/lib/gitlab/quick_actions/merge_request_actions.rb @@ -57,6 +57,11 @@ module Gitlab access_check.can_push_to_branch?(merge_request.source_branch) end command :rebase do + unless quick_action_target.permits_force_push? + @execution_message[:rebase] = _('This merge request branch is protected from force push.') + next + end + if quick_action_target.cannot_be_merged? @execution_message[:rebase] = _('This merge request cannot be rebased while there are conflicts.') next @@ -184,7 +189,7 @@ module Gitlab execution_message do |users = nil| reviewers = reviewers_to_add(users) if reviewers.blank? - _("Failed to assign a reviewer because no user was found.") + _("Failed to assign a reviewer because no user was specified.") else _('Assigned %{reviewer_users_sentence} as %{reviewer_text}.') % { reviewer_users_sentence: reviewer_users_sentence(users), reviewer_text: 'reviewer'.pluralize(reviewers.size) } @@ -249,6 +254,76 @@ module Gitlab @updates[:reviewer_ids] = [] end end + + desc do + if quick_action_target.allows_multiple_reviewers? + _('Request attention from assignee(s) or reviewer(s)') + else + _('Request attention from assignee or reviewer') + end + end + explanation do |users| + _('Request attention from %{users_sentence}.') % { users_sentence: reviewer_users_sentence(users) } + end + execution_message do |users = nil| + if users.blank? + _("Failed to request attention because no user was found.") + else + _('Requested attention from %{users_sentence}.') % { users_sentence: reviewer_users_sentence(users) } + end + end + params do + quick_action_target.allows_multiple_reviewers? ? '@user1 @user2' : '@user' + end + types MergeRequest + condition do + Feature.enabled?(:mr_attention_requests, project, default_enabled: :yaml) && + current_user.can?(:"admin_#{quick_action_target.to_ability_name}", project) + end + parse_params do |attention_param| + extract_users(attention_param) + end + command :attention do |users| + next if users.empty? + + users.each do |user| + ::MergeRequests::ToggleAttentionRequestedService.new(project: quick_action_target.project, merge_request: quick_action_target, current_user: current_user, user: user).execute + end + end + + desc do + if quick_action_target.allows_multiple_reviewers? + _('Remove attention request(s)') + else + _('Remove attention request') + end + end + explanation do |users| + _('Removes attention from %{users_sentence}.') % { users_sentence: reviewer_users_sentence(users) } + end + execution_message do |users = nil| + if users.blank? + _("Failed to remove attention because no user was found.") + else + _('Removed attention from %{users_sentence}.') % { users_sentence: reviewer_users_sentence(users) } + end + end + params do + quick_action_target.allows_multiple_reviewers? ? '@user1 @user2' : '@user' + end + types MergeRequest + condition do + Feature.enabled?(:mr_attention_requests, project, default_enabled: :yaml) && + current_user.can?(:"admin_#{quick_action_target.to_ability_name}", project) + end + parse_params do |attention_param| + extract_users(attention_param) + end + command :remove_attention do |users| + next if users.empty? + + ::MergeRequests::BulkRemoveAttentionRequestedService.new(project: quick_action_target.project, merge_request: quick_action_target, current_user: current_user, users: users).execute + end end def reviewer_users_sentence(users) |