diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/EmailReviewComments.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/EmailReviewComments.java index efd49801ff..11a9eddc7c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/EmailReviewComments.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/EmailReviewComments.java @@ -22,6 +22,7 @@ import com.google.gerrit.reviewdb.client.PatchLineComment; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.change.PostReview.NotifyHandling; import com.google.gerrit.server.git.WorkQueue; import com.google.gerrit.server.mail.CommentSender; import com.google.gerrit.server.patch.PatchSetInfoFactory; @@ -46,6 +47,7 @@ class EmailReviewComments implements Runnable, RequestContext { interface Factory { EmailReviewComments create( + NotifyHandling notify, Change change, PatchSet patchSet, Account.Id authorId, @@ -59,6 +61,7 @@ class EmailReviewComments implements Runnable, RequestContext { private final SchemaFactory schemaFactory; private final ThreadLocalRequestContext requestContext; + private final PostReview.NotifyHandling notify; private final Change change; private final PatchSet patchSet; private final Account.Id authorId; @@ -73,6 +76,7 @@ class EmailReviewComments implements Runnable, RequestContext { CommentSender.Factory commentSenderFactory, SchemaFactory schemaFactory, ThreadLocalRequestContext requestContext, + @Assisted NotifyHandling notify, @Assisted Change change, @Assisted PatchSet patchSet, @Assisted Account.Id authorId, @@ -83,6 +87,7 @@ class EmailReviewComments implements Runnable, RequestContext { this.commentSenderFactory = commentSenderFactory; this.schemaFactory = schemaFactory; this.requestContext = requestContext; + this.notify = notify; this.change = change; this.patchSet = patchSet; this.authorId = authorId; @@ -122,7 +127,7 @@ class EmailReviewComments implements Runnable, RequestContext { } }); - CommentSender cm = commentSenderFactory.create(change); + CommentSender cm = commentSenderFactory.create(notify, change); cm.setFrom(authorId); cm.setPatchSet(patchSet, patchSetInfoFactory.get(change, patchSet)); cm.setChangeMessage(message); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java index d165a4a0f9..1a9d1f22b3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java @@ -76,12 +76,19 @@ public class PostReview implements RestModifyView { * described in this input request. */ public DraftHandling drafts = DraftHandling.DELETE; + + /** Who to send email notifications to after review is stored. */ + public NotifyHandling notify = NotifyHandling.ALL; } public static enum DraftHandling { DELETE, PUBLISH, KEEP; } + public static enum NotifyHandling { + NONE, OWNER, OWNER_REVIEWERS, ALL; + } + static class Comment { String id; GetDraft.Side side; @@ -132,6 +139,9 @@ public class PostReview implements RestModifyView { if (input.comments != null) { checkComments(input.comments); } + if (input.notify == null) { + input.notify = NotifyHandling.NONE; + } db.changes().beginTransaction(revision.getChange().getId()); try { @@ -151,8 +161,9 @@ public class PostReview implements RestModifyView { db.rollback(); } - if (message != null) { + if (input.notify.compareTo(NotifyHandling.NONE) > 0 && message != null) { email.create( + input.notify, change, revision.getPatchSet(), revision.getAuthorId(), diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java index 6931addcc3..656a412b5a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java @@ -15,10 +15,11 @@ package com.google.gerrit.server.mail; import com.google.gerrit.common.errors.EmailException; +import com.google.gerrit.reviewdb.client.AccountProjectWatch.NotifyType; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Patch; import com.google.gerrit.reviewdb.client.PatchLineComment; -import com.google.gerrit.reviewdb.client.AccountProjectWatch.NotifyType; +import com.google.gerrit.server.change.PostReview.NotifyHandling; import com.google.gerrit.server.config.AnonymousCowardName; import com.google.gerrit.server.patch.PatchFile; import com.google.gerrit.server.patch.PatchList; @@ -38,15 +39,19 @@ import java.util.Set; /** Send comments, after the author of them hit used Publish Comments in the UI. */ public class CommentSender extends ReplyToChangeSender { public static interface Factory { - public CommentSender create(Change change); + public CommentSender create(NotifyHandling notify, Change change); } + private final NotifyHandling notify; private List inlineComments = Collections.emptyList(); @Inject public CommentSender(EmailArguments ea, - @AnonymousCowardName String anonymousCowardName, @Assisted Change c) { + @AnonymousCowardName String anonymousCowardName, + @Assisted NotifyHandling notify, + @Assisted Change c) { super(ea, anonymousCowardName, c, "comment"); + this.notify = notify; } public void setPatchLineComments(final List plc) { @@ -68,9 +73,13 @@ public class CommentSender extends ReplyToChangeSender { protected void init() throws EmailException { super.init(); - ccAllApprovals(); - bccStarredBy(); - includeWatchers(NotifyType.ALL_COMMENTS); + if (notify.compareTo(NotifyHandling.OWNER_REVIEWERS) >= 0) { + ccAllApprovals(); + } + if (notify.compareTo(NotifyHandling.ALL) >= 0) { + bccStarredBy(); + includeWatchers(NotifyType.ALL_COMMENTS); + } } @Override