diff options
author | Bob Van Landuyt <bob@vanlanduyt.co> | 2016-12-22 13:31:12 +0100 |
---|---|---|
committer | Bob Van Landuyt <bob@gitlab.com> | 2017-03-13 08:27:51 +0100 |
commit | 0267b83898d604181e70c5ea8ac4a84108d2e6d6 (patch) | |
tree | 3ce8cc81ba90185c976f3b19b7e548c67856370f /app/services/issues/base_service.rb | |
parent | 9ed3db915026c6e0cd266a1c276386e3e96d2151 (diff) | |
download | gitlab-ce-0267b83898d604181e70c5ea8ac4a84108d2e6d6.tar.gz |
Delegate a single discussion to a new issue
Delegate a discussion in a merge request into a new issue.
The discussion wil be marked as resolved and a system note will be
added linking to the newly created issue.
Diffstat (limited to 'app/services/issues/base_service.rb')
-rw-r--r-- | app/services/issues/base_service.rb | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index 35af867a098..3aa842eb9a8 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -1,11 +1,12 @@ module Issues class BaseService < ::IssuableBaseService - attr_reader :merge_request_for_resolving_discussions + attr_reader :merge_request_for_resolving_discussions, :discussion_to_resolve def initialize(*args) super @merge_request_for_resolving_discussions ||= params.delete(:merge_request_for_resolving_discussions) + @discussion_to_resolve ||= params.delete(:discussion_to_resolve) end def hook_data(issue, action) @@ -15,6 +16,28 @@ module Issues issue_data end + def merge_request_for_resolving_discussions + @merge_request_for_resolving_discussions ||= discussion_to_resolve.try(:noteable) + end + + def for_all_discussions_in_a_merge_request? + discussion_to_resolve.nil? && merge_request_for_resolving_discussions + end + + def for_single_discussion? + discussion_to_resolve && discussion_to_resolve.noteable == merge_request_for_resolving_discussions + end + + def discussions_to_resolve + @discussions_to_resolve ||= if for_all_discussions_in_a_merge_request? + merge_request_for_resolving_discussions.resolvable_discussions + elsif for_single_discussion? + Array(discussion_to_resolve) + else + [] + end + end + private def execute_hooks(issue, action = 'open') |