From be59d97cadbd7070020260d1f30b7038e6e44c42 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Fri, 4 Jan 2013 15:13:51 +0100 Subject: [PATCH] Add users mentioned in commit footer as reviewers on draft publish If a user is mentioned in a footer of a commit message (e.g. by a 'Signed-off-by') then this user is added as reviewer to this change/patchset. This is important because the mentioned user may want to check that he is correctly referenced. If a draft change/patchset is uploaded the users mentioned in the footers cannot be added as reviewers because this would make the draft visible to them. But they should be added as reviewers when the draft is published since the change/patchset is now visible to them. Change-Id: I1fa77460eae25b48a3cab4e4535f1508146fea11 Signed-off-by: Edwin Kempin --- .../gerrit/server/changedetail/PublishDraft.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/PublishDraft.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/PublishDraft.java index 10eedfd8ed..1cf0bd24c0 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/PublishDraft.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/PublishDraft.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.changedetail; +import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromApprovals; import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromFooters; import com.google.gerrit.common.ChangeHooks; @@ -23,6 +24,7 @@ import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.reviewdb.client.PatchSet; +import com.google.gerrit.reviewdb.client.PatchSetApproval; import com.google.gerrit.reviewdb.client.PatchSetInfo; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.ApprovalsUtil; @@ -51,6 +53,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.concurrent.Callable; @@ -67,6 +70,7 @@ public class PublishDraft implements Callable { private final ChangeHooks hooks; private final GitRepositoryManager repoManager; private final PatchSetInfoFactory patchSetInfoFactory; + private final ApprovalsUtil approvalsUtil; private final AccountResolver accountResolver; private final CreateChangeSender.Factory createChangeSenderFactory; private final ReplacePatchSetSender.Factory replacePatchSetFactory; @@ -88,6 +92,7 @@ public class PublishDraft implements Callable { this.hooks = hooks; this.repoManager = repoManager; this.patchSetInfoFactory = patchSetInfoFactory; + this.approvalsUtil = approvalsUtil; this.accountResolver = accountResolver; this.createChangeSenderFactory = createChangeSenderFactory; this.replacePatchSetFactory = replacePatchSetFactory; @@ -170,6 +175,8 @@ public class PublishDraft implements Callable { recipients.remove(me); if (newChange) { + approvalsUtil.addReviewers(db, updatedChange, updatedPatchSet, info, + recipients.getReviewers(), Collections. emptySet()); try { CreateChangeSender cm = createChangeSenderFactory.create(updatedChange); cm.setFrom(me); @@ -181,6 +188,12 @@ public class PublishDraft implements Callable { log.error("Cannot send email for new change " + updatedChange.getId(), e); } } else { + final List patchSetApprovals = + db.patchSetApprovals().byChange(updatedChange.getId()).toList(); + final MailRecipients oldRecipients = + getRecipientsFromApprovals(patchSetApprovals); + approvalsUtil.addReviewers(db, updatedChange, updatedPatchSet, info, + recipients.getReviewers(), oldRecipients.getAll()); final ChangeMessage msg = new ChangeMessage(new ChangeMessage.Key(updatedChange.getId(), ChangeUtil.messageUUID(db)), me,