From c85a19f920da1b544bbfae344145503c25e71048 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Wed, 7 Nov 2018 13:33:42 +0100 Subject: Allow limiting quick actions to execute Sometimes we don't want to trigger any quick actions that cause side effects. For example when building a record to validate. This allows listing the quick actions that need to be performed. --- app/services/issuable_base_service.rb | 4 ++-- app/services/merge_requests/build_service.rb | 4 +++- app/services/quick_actions/interpret_service.rb | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'app/services') diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index c388913ae65..e32e262ac31 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -126,12 +126,12 @@ class IssuableBaseService < BaseService merge_quick_actions_into_params!(issuable) end - def merge_quick_actions_into_params!(issuable) + def merge_quick_actions_into_params!(issuable, only: nil) original_description = params.fetch(:description, issuable.description) description, command_params = QuickActions::InterpretService.new(project, current_user) - .execute(original_description, issuable) + .execute(original_description, issuable, only: only) # Avoid a description already set on an issuable to be overwritten by a nil params[:description] = description if description diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 6c9e566109a..6c69452e2ab 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -7,7 +7,9 @@ module MergeRequests def execute @params_issue_iid = params.delete(:issue_iid) self.merge_request = MergeRequest.new - merge_quick_actions_into_params!(merge_request) + # TODO: this should handle all quick actions that don't have side effects + # https://gitlab.com/gitlab-org/gitlab-ce/issues/53658 + merge_quick_actions_into_params!(merge_request, only: [:target_branch]) merge_request.assign_attributes(params) merge_request.author = current_user diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index eb431c36807..9c81de7e90e 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -23,13 +23,13 @@ module QuickActions # Takes a text and interprets the commands that are extracted from it. # Returns the content without commands, and hash of changes to be applied to a record. - def execute(content, issuable) + def execute(content, issuable, only: nil) return [content, {}] unless current_user.can?(:use_quick_actions) @issuable = issuable @updates = {} - content, commands = extractor.extract_commands(content) + content, commands = extractor.extract_commands(content, only: only) extract_updates(commands) [content, @updates] -- cgit v1.2.1