summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-15 16:31:34 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-15 16:31:34 +0000
commitfb7ce7bd13a3114ee083a2d75ba72ea24e633cfc (patch)
treebe1ff99b35674fb522dccd40515f2d350a384ed7
parent5f78601c8a67028f246134d325cca99952ba78b6 (diff)
parentb73ffbd3cb7dd89f54351b74e0cf4d1df63f0310 (diff)
downloadgitlab-ce-fb7ce7bd13a3114ee083a2d75ba72ea24e633cfc.tar.gz
Merge branch 'fix-mention-notification' into 'master'
Fix Mention notification level. Fixes internal issue https://dev.gitlab.org/gitlab/gitlabhq/issues/2236. See merge request !527
-rw-r--r--app/services/notification_service.rb39
1 files changed, 15 insertions, 24 deletions
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 203e654c18f..cfed7964c37 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -130,22 +130,25 @@ class NotificationService
if note.commit_id.present?
recipients << note.commit_author
end
-
- # Get users who left comment in thread
- recipients = recipients.concat(noteable_commenters(note))
+
+ # Add all users participating in the thread (author, assignee, comment authors)
+ participants =
+ if target.respond_to?(:participants)
+ target.participants
+ elsif target.is_a?(Commit)
+ author_ids = Note.for_commit_id(target.id).pluck(:author_id).uniq
+ User.where(id: author_ids)
+ else
+ note.mentioned_users
+ end
+ recipients = recipients.concat(participants)
# Merge project watchers
recipients = recipients.concat(project_watchers(note.project)).compact.uniq
- # Reject users with Mention notification level
- recipients = reject_mention_users(recipients, note.project)
-
- # Add explicitly mentioned users
- if target.respond_to?(:participants)
- recipients = recipients.concat(target.participants)
- else
- recipients = recipients.concat(note.mentioned_users)
- end
+ # Reject users with Mention notification level, except those mentioned in _this_ note.
+ recipients = reject_mention_users(recipients - note.mentioned_users, note.project)
+ recipients = recipients + note.mentioned_users
# Reject mutes users
recipients = reject_muted_users(recipients, note.project)
@@ -216,18 +219,6 @@ class NotificationService
protected
- def noteable_commenters(note)
- opts = { noteable_type: note.noteable_type, project_id: note.project_id }
-
- if note.commit_id.present?
- opts.merge!(commit_id: note.commit_id)
- else
- opts.merge!(noteable_id: note.noteable_id)
- end
-
- User.where(id: Note.where(opts).pluck(:author_id))
- end
-
# Get project users with WATCH notification level
def project_watchers(project)
project_members = project_member_notification(project)