diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java index 9606397399..6a78eb5367 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java @@ -228,6 +228,7 @@ public class CherryPickChange { .setMessage("Uploaded patch set " + newPatchSetId.get() + ".") .setDraft(current.isDraft()) .setUploader(identifiedUser.getAccountId()) + .setSendMail(false) .insert(); return change.getId(); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java index 9890f53d63..9bb67ea04b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java @@ -138,7 +138,7 @@ public class RebaseChange { rebase(git, rw, inserter, patchSetId, change, uploader, baseCommit, mergeUtilFactory.create( changeControl.getProjectControl().getProjectState(), true), - committerIdent, true, true, ValidatePolicy.GERRIT); + committerIdent, true, ValidatePolicy.GERRIT); } catch (MergeConflictException e) { throw new IOException(e.getMessage()); } finally { @@ -265,7 +265,6 @@ public class RebaseChange { * @param baseCommit the commit that should be the new base * @param mergeUtil merge utilities for the destination project * @param committerIdent the committer's identity - * @param sendMail if a mail notification should be sent for the new patch set * @param runHooks if hooks should be run for the new patch set * @param validate if commit validation should be run for the new patch set * @return the new patch set which is based on the given base commit @@ -279,7 +278,7 @@ public class RebaseChange { final ObjectInserter inserter, final PatchSet.Id patchSetId, final Change change, final IdentifiedUser uploader, final RevCommit baseCommit, final MergeUtil mergeUtil, PersonIdent committerIdent, - boolean sendMail, boolean runHooks, ValidatePolicy validate) + boolean runHooks, ValidatePolicy validate) throws NoSuchChangeException, OrmException, IOException, InvalidChangeOperationException, MergeConflictException { @@ -303,7 +302,7 @@ public class RebaseChange { .setValidatePolicy(validate) .setDraft(originalPatchSet.isDraft()) .setUploader(uploader.getAccountId()) - .setSendMail(sendMail) + .setSendMail(false) .setRunHooks(runHooks); final PatchSet.Id newPatchSetId = patchSetInserter.getPatchSetId(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 5959b1d71e..cc2330b2c0 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -1985,14 +1985,12 @@ public class ReceiveCommits { return Futures.makeChecked(future, INSERT_EXCEPTION); } - private ChangeMessage newChangeMessage(ReviewDb db) throws OrmException { + private ChangeMessage newChangeMessage(ReviewDb db, ChangeKind changeKind) + throws OrmException { msg = new ChangeMessage(new ChangeMessage.Key(change.getId(), ChangeUtil .messageUUID(db)), currentUser.getAccountId(), newPatchSet.getCreatedOn(), newPatchSet.getId()); - RevCommit priorCommit = revisions.inverse().get(priorPatchSet); - ChangeKind changeKind = changeKindCache.getChangeKind( - projectControl.getProjectState(), repo, priorCommit, newCommit); String message = "Uploaded patch set " + newPatchSet.getPatchSetId(); switch (changeKind) { case TRIVIAL_REBASE: @@ -2032,6 +2030,7 @@ public class ReceiveCommits { recipients.remove(me); db.changes().beginTransaction(change.getId()); + ChangeKind changeKind = ChangeKind.REWORK; try { change = db.changes().get(change.getId()); if (change == null || change.getStatus().isClosed()) { @@ -2057,7 +2056,11 @@ public class ReceiveCommits { changeCtl, approvals); recipients.add(oldRecipients); - cmUtil.addChangeMessage(db, update, newChangeMessage(db)); + RevCommit priorCommit = revisions.inverse().get(priorPatchSet); + changeKind = changeKindCache.getChangeKind( + projectControl.getProjectState(), repo, priorCommit, newCommit); + + cmUtil.addChangeMessage(db, update, newChangeMessage(db, changeKind)); if (mergedIntoRef == null) { // Change should be new, so it can go through review again. @@ -2119,32 +2122,34 @@ public class ReceiveCommits { cmd.execute(rp); } CheckedFuture f = indexer.indexAsync(change.getId()); - workQueue.getDefaultQueue() - .submit(requestScopePropagator.wrap(new Runnable() { - @Override - public void run() { - try { - ReplacePatchSetSender cm = - replacePatchSetFactory.create(change); - cm.setFrom(me); - cm.setPatchSet(newPatchSet, info); - cm.setChangeMessage(msg); - cm.addReviewers(recipients.getReviewers()); - cm.addExtraCC(recipients.getCcOnly()); - cm.send(); - } catch (Exception e) { - log.error("Cannot send email for new patch set " + newPatchSet.getId(), e); + if (changeKind != ChangeKind.TRIVIAL_REBASE) { + workQueue.getDefaultQueue() + .submit(requestScopePropagator.wrap(new Runnable() { + @Override + public void run() { + try { + ReplacePatchSetSender cm = + replacePatchSetFactory.create(change); + cm.setFrom(me); + cm.setPatchSet(newPatchSet, info); + cm.setChangeMessage(msg); + cm.addReviewers(recipients.getReviewers()); + cm.addExtraCC(recipients.getCcOnly()); + cm.send(); + } catch (Exception e) { + log.error("Cannot send email for new patch set " + newPatchSet.getId(), e); + } + if (mergedIntoRef != null) { + sendMergedEmail(ReplaceRequest.this); + } } - if (mergedIntoRef != null) { - sendMergedEmail(ReplaceRequest.this); - } - } - @Override - public String toString() { - return "send-email newpatchset"; - } - })); + @Override + public String toString() { + return "send-email newpatchset"; + } + })); + } f.checkedGet(); gitRefUpdated.fire(project.getNameKey(), newPatchSet.getRefName(), diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java index 482dae3a3e..e681648ed6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java @@ -91,7 +91,7 @@ public class RebaseIfNecessary extends SubmitStrategy { rebaseChange.rebase(args.repo, args.rw, args.inserter, n.getPatchsetId(), n.change(), uploader, mergeTip.getCurrentTip(), args.mergeUtil, - args.serverIdent.get(), false, false, ValidatePolicy.NONE); + args.serverIdent.get(), false, ValidatePolicy.NONE); List approvals = Lists.newArrayList(); for (PatchSetApproval a : args.approvalsUtil.byPatchSet(args.db,