Ignore notifications for work in progress workflow
Change-Id: Icc190718b5005c560d734603f6e6edc24cd89fe9
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
index 2372d89..4eadaa9 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
@@ -221,6 +221,66 @@
}
@Test
+ public void noNotificationForWipChangesForWatchersInNotifyConfig() throws Exception {
+ Address addr = new Address("Watcher", "watcher@example.com");
+ NotifyConfig nc = new NotifyConfig();
+ nc.addEmail(addr);
+ nc.setName("team");
+ nc.setHeader(NotifyConfig.Header.TO);
+ nc.setTypes(EnumSet.of(NotifyType.NEW_CHANGES, NotifyType.ALL_COMMENTS));
+
+ ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
+ cfg.putNotifyConfig("team", nc);
+ saveProjectConfig(project, cfg);
+
+ sender.clear();
+ PushOneCommit.Result r =
+ pushFactory
+ .create(db, admin.getIdent(), testRepo, "wip change", "a", "a1")
+ .to("refs/for/master%wip");
+ r.assertOkStatus();
+
+ assertThat(sender.getMessages()).isEmpty();
+
+ setApiUser(admin);
+ ReviewInput in = new ReviewInput();
+ in.message = "comment";
+ gApi.changes().id(r.getChangeId()).current().review(in);
+
+ assertThat(sender.getMessages()).isEmpty();
+ }
+
+ @Test
+ public void noNotificationForChangeThatIsTurnedWipForWatchersInNotifyConfig() throws Exception {
+ Address addr = new Address("Watcher", "watcher@example.com");
+ NotifyConfig nc = new NotifyConfig();
+ nc.addEmail(addr);
+ nc.setName("team");
+ nc.setHeader(NotifyConfig.Header.TO);
+ nc.setTypes(EnumSet.of(NotifyType.NEW_PATCHSETS));
+
+ ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
+ cfg.putNotifyConfig("team", nc);
+ saveProjectConfig(project, cfg);
+
+ PushOneCommit.Result r =
+ pushFactory
+ .create(db, admin.getIdent(), testRepo, "subject", "a", "a1")
+ .to("refs/for/master");
+ r.assertOkStatus();
+
+ sender.clear();
+
+ r =
+ pushFactory
+ .create(db, admin.getIdent(), testRepo, "subject", "a", "a2", r.getChangeId())
+ .to("refs/for/master%wip");
+ r.assertOkStatus();
+
+ assertThat(sender.getMessages()).isEmpty();
+ }
+
+ @Test
public void watchProject() throws Exception {
// watch project
String watchedProject = createProject("watchedProject").get();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
index e45c7d0..21e9ad5 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
@@ -155,7 +155,9 @@
}
if (notify.compareTo(NotifyHandling.ALL) >= 0) {
bccStarredBy();
- includeWatchers(NotifyType.ALL_COMMENTS, !patchSet.isDraft() && !change.isPrivate());
+ includeWatchers(
+ NotifyType.ALL_COMMENTS,
+ !patchSet.isDraft() && !change.isWorkInProgress() && !change.isPrivate());
}
removeUsersThatIgnoredTheChange();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CreateChangeSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
index 2c6e655..8757a28 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
@@ -48,9 +48,13 @@
super.init();
boolean isDraft = change.getStatus() == Change.Status.DRAFT;
+
try {
// Try to mark interested owners with TO and CC or BCC line.
- Watchers matching = getWatchers(NotifyType.NEW_CHANGES, !isDraft && !change.isPrivate());
+ Watchers matching =
+ getWatchers(
+ NotifyType.NEW_CHANGES,
+ !isDraft && !change.isWorkInProgress() && !change.isPrivate());
for (Account.Id user :
Iterables.concat(matching.to.accounts, matching.cc.accounts, matching.bcc.accounts)) {
if (isOwnerOfProjectOrBranch(user)) {
@@ -69,7 +73,8 @@
log.warn("Cannot notify watchers for new change", err);
}
- includeWatchers(NotifyType.NEW_PATCHSETS, !isDraft && !change.isPrivate());
+ includeWatchers(
+ NotifyType.NEW_PATCHSETS, !isDraft && !change.isWorkInProgress() && !change.isPrivate());
}
private boolean isOwnerOfProjectOrBranch(Account.Id user) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java
index 0902d0b..1483e21 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java
@@ -66,8 +66,9 @@
add(RecipientType.CC, extraCC);
rcptToAuthors(RecipientType.CC);
bccStarredBy();
- removeUsersThatIgnoredTheChange();
- includeWatchers(NotifyType.NEW_PATCHSETS, !patchSet.isDraft() && !change.isPrivate());
+ includeWatchers(
+ NotifyType.NEW_PATCHSETS,
+ !patchSet.isDraft() && !change.isWorkInProgress() && !change.isPrivate());
removeUsersThatIgnoredTheChange();
}