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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-05-27 09:08:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-05-27 09:08:13 +0300
commit5c763ac4c62bdeb0f0fe26f710c0a7a91921a949 (patch)
treeb267d888cb2e4aee67f172e4c447071124df170d /app/services/discussions/resolve_service.rb
parentae5e7e4855d32353b371d8eb774a12e1f07a1070 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/discussions/resolve_service.rb')
-rw-r--r--app/services/discussions/resolve_service.rb42
1 files changed, 35 insertions, 7 deletions
diff --git a/app/services/discussions/resolve_service.rb b/app/services/discussions/resolve_service.rb
index 816cd45b07a..3aa6245b54d 100644
--- a/app/services/discussions/resolve_service.rb
+++ b/app/services/discussions/resolve_service.rb
@@ -2,8 +2,34 @@
module Discussions
class ResolveService < Discussions::BaseService
- def execute(one_or_more_discussions)
- Array(one_or_more_discussions).each { |discussion| resolve_discussion(discussion) }
+ include Gitlab::Utils::StrongMemoize
+
+ def initialize(project, user = nil, params = {})
+ @discussions = Array.wrap(params.fetch(:one_or_more_discussions))
+ @follow_up_issue = params[:follow_up_issue]
+
+ raise ArgumentError, 'Discussions must be all for the same noteable' \
+ unless noteable_is_same?
+
+ super
+ end
+
+ def execute
+ discussions.each(&method(:resolve_discussion))
+ end
+
+ private
+
+ attr_accessor :discussions, :follow_up_issue
+
+ def noteable_is_same?
+ return true unless discussions.size > 1
+
+ # Perform this check without fetching extra records
+ discussions.all? do |discussion|
+ discussion.noteable_type == first_discussion.noteable_type &&
+ discussion.noteable_id == first_discussion.noteable_id
+ end
end
def resolve_discussion(discussion)
@@ -11,16 +37,18 @@ module Discussions
discussion.resolve!(current_user)
- MergeRequests::ResolvedDiscussionNotificationService.new(project, current_user).execute(merge_request)
+ MergeRequests::ResolvedDiscussionNotificationService.new(project, current_user).execute(merge_request) if merge_request
SystemNoteService.discussion_continued_in_issue(discussion, project, current_user, follow_up_issue) if follow_up_issue
end
- def merge_request
- params[:merge_request]
+ def first_discussion
+ @first_discussion ||= discussions.first
end
- def follow_up_issue
- params[:follow_up_issue]
+ def merge_request
+ strong_memoize(:merge_request) do
+ first_discussion.noteable if first_discussion.for_merge_request?
+ end
end
end
end