summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-15 15:53:23 +0200
committerDouwe Maan <douwe@gitlab.com>2015-04-15 17:57:26 +0200
commitefe962934661cd94edb1c24c6d34419cd28b82f9 (patch)
tree52a43775fe17dc4364c09d90ccadebf84a8ae731
parent80097606f59c52ab962a3bec1e67f67d1a3cb6c7 (diff)
downloadgitlab-ce-efe962934661cd94edb1c24c6d34419cd28b82f9.tar.gz
Fix Mention notification level.
-rw-r--r--app/services/notification_service.rb37
1 files changed, 13 insertions, 24 deletions
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 203e654c18f..ab5a653d5c0 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -130,22 +130,23 @@ 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.is_a?(Commit)
+ author_ids = Note.for_commit_id(target.id).pluck(:author_id).uniq
+ User.where(id: author_ids)
+ else
+ target.participants
+ 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 +217,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)