From 5818cf063bda5f6a96ccefe086b64a3699dd2c67 Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie <pierre@capitainetrain.com> Date: Mon, 24 Feb 2014 15:31:58 +0100 Subject: [PATCH] Don't send an email for "mentioned in" notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, an email is sent every time a mentionable is referenced by an issue, a commit or a merge request: if I comment "This MR is related to #5", watchers get one email for the comment, and another one stating "Issue #5 was mentioned by issue #13". This is annoying — but the biggest issue is when pushing an existing branch. Every issue referenced by commit messages in this branch will get a new mention (which is fine), and dozens of emails will be sent for all these new mentions (which is not). This commit fixes the spam by avoiding to send an email when a new mention is created. In most cases the email notification for the mentioner is enough. --- app/services/notification_service.rb | 1 + spec/services/notification_service_spec.rb | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 9d7bb9639ac..ee867a1da0c 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -111,6 +111,7 @@ class NotificationService # ignore gitlab service messages return true if note.note =~ /\A_Status changed to closed_/ + return true if note.note =~ /\A_mentioned in / && note.system == true opts = { noteable_type: note.noteable_type, project_id: note.project_id } diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index e378be04255..0869ebc9e0f 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -32,6 +32,7 @@ describe NotificationService do describe 'Notes' do context 'issue note' do let(:issue) { create(:issue, assignee: create(:user)) } + let(:mentioned_issue) { create(:issue, assignee: issue.assignee) } let(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: '@mention referenced') } before do @@ -50,6 +51,13 @@ describe NotificationService do notification.new_note(note) end + it 'filters out "mentioned in" notes' do + mentioned_note = Note.create_cross_reference_note(mentioned_issue, issue, issue.author, issue.project) + + Notify.should_not_receive(:note_issue_email) + notification.new_note(mentioned_note) + end + def should_email(user_id) Notify.should_receive(:note_issue_email).with(user_id, note.id) end -- GitLab