Move new change email from ReceiveCommits to ChangeInserter

ChangeInserter was already able to send email about a new change,
but this was disabled by ReceiveCommits. The code was identical
between the two sites, aside from background delivery.

Remove the code from ReceiveCommits and background formatting and
delivery inside the inserter.

Change-Id: I38cc862d98d58ab7f053942cfccf79703d756a43
This commit is contained in:
Shawn Pearce
2014-12-10 15:54:19 -08:00
parent b364901445
commit c22888d3fc
2 changed files with 40 additions and 38 deletions

View File

@@ -33,12 +33,14 @@ import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.auth.AuthException; import com.google.gerrit.server.auth.AuthException;
import com.google.gerrit.server.extensions.events.GitReferenceUpdated; import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.index.ChangeIndexer; import com.google.gerrit.server.index.ChangeIndexer;
import com.google.gerrit.server.mail.CreateChangeSender; import com.google.gerrit.server.mail.CreateChangeSender;
import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.RefControl; import com.google.gerrit.server.project.RefControl;
import com.google.gerrit.server.util.RequestScopePropagator;
import com.google.gerrit.server.validators.ValidationException; import com.google.gerrit.server.validators.ValidationException;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject; import com.google.inject.Inject;
@@ -73,6 +75,7 @@ public class ChangeInserter {
private final CreateChangeSender.Factory createChangeSenderFactory; private final CreateChangeSender.Factory createChangeSenderFactory;
private final HashtagsUtil hashtagsUtil; private final HashtagsUtil hashtagsUtil;
private final AccountCache accountCache; private final AccountCache accountCache;
private final WorkQueue workQueue;
private final RefControl refControl; private final RefControl refControl;
private final Change change; private final Change change;
@@ -85,6 +88,7 @@ public class ChangeInserter {
private Set<Account.Id> extraCC; private Set<Account.Id> extraCC;
private Map<String, Short> approvals; private Map<String, Short> approvals;
private Set<String> hashtags; private Set<String> hashtags;
private RequestScopePropagator requestScopePropagator;
private boolean runHooks; private boolean runHooks;
private boolean sendMail; private boolean sendMail;
@@ -100,6 +104,7 @@ public class ChangeInserter {
CreateChangeSender.Factory createChangeSenderFactory, CreateChangeSender.Factory createChangeSenderFactory,
HashtagsUtil hashtagsUtil, HashtagsUtil hashtagsUtil,
AccountCache accountCache, AccountCache accountCache,
WorkQueue workQueue,
@Assisted RefControl refControl, @Assisted RefControl refControl,
@Assisted Change change, @Assisted Change change,
@Assisted RevCommit commit) { @Assisted RevCommit commit) {
@@ -113,6 +118,7 @@ public class ChangeInserter {
this.createChangeSenderFactory = createChangeSenderFactory; this.createChangeSenderFactory = createChangeSenderFactory;
this.hashtagsUtil = hashtagsUtil; this.hashtagsUtil = hashtagsUtil;
this.accountCache = accountCache; this.accountCache = accountCache;
this.workQueue = workQueue;
this.refControl = refControl; this.refControl = refControl;
this.change = change; this.change = change;
this.commit = commit; this.commit = commit;
@@ -173,6 +179,11 @@ public class ChangeInserter {
return this; return this;
} }
public ChangeInserter setRequestScopePropagator(RequestScopePropagator r) {
this.requestScopePropagator = r;
return this;
}
public PatchSet getPatchSet() { public PatchSet getPatchSet() {
return patchSet; return patchSet;
} }
@@ -224,21 +235,36 @@ public class ChangeInserter {
CheckedFuture<?, IOException> f = indexer.indexAsync(change.getId()); CheckedFuture<?, IOException> f = indexer.indexAsync(change.getId());
if(!messageIsForChange()) { if (!messageIsForChange()) {
commitMessageNotForChange(); commitMessageNotForChange();
} }
if (sendMail) { if (sendMail) {
try { Runnable sender = new Runnable() {
CreateChangeSender cm = @Override
createChangeSenderFactory.create(change); public void run() {
cm.setFrom(change.getOwner()); try {
cm.setPatchSet(patchSet, patchSetInfo); CreateChangeSender cm =
cm.addReviewers(reviewers); createChangeSenderFactory.create(change);
cm.addExtraCC(extraCC); cm.setFrom(change.getOwner());
cm.send(); cm.setPatchSet(patchSet, patchSetInfo);
} catch (Exception err) { cm.addReviewers(reviewers);
log.error("Cannot send email for new change " + change.getId(), err); cm.addExtraCC(extraCC);
cm.send();
} catch (Exception e) {
log.error("Cannot send email for new change " + change.getId(), e);
}
}
@Override
public String toString() {
return "send-email newchange";
}
};
if (requestScopePropagator != null) {
workQueue.getDefaultQueue().submit(requestScopePropagator.wrap(sender));
} else {
sender.run();
} }
} }
f.checkedGet(); f.checkedGet();

View File

@@ -279,7 +279,6 @@ public class ReceiveCommits {
private final SchemaFactory<ReviewDb> schemaFactory; private final SchemaFactory<ReviewDb> schemaFactory;
private final AccountResolver accountResolver; private final AccountResolver accountResolver;
private final CmdLineParser.Factory optionParserFactory; private final CmdLineParser.Factory optionParserFactory;
private final CreateChangeSender.Factory createChangeSenderFactory;
private final MergedSender.Factory mergedSenderFactory; private final MergedSender.Factory mergedSenderFactory;
private final ReplacePatchSetSender.Factory replacePatchSetFactory; private final ReplacePatchSetSender.Factory replacePatchSetFactory;
private final GitReferenceUpdated gitRefUpdated; private final GitReferenceUpdated gitRefUpdated;
@@ -347,7 +346,6 @@ public class ReceiveCommits {
final ChangeUpdate.Factory updateFactory, final ChangeUpdate.Factory updateFactory,
final AccountResolver accountResolver, final AccountResolver accountResolver,
final CmdLineParser.Factory optionParserFactory, final CmdLineParser.Factory optionParserFactory,
final CreateChangeSender.Factory createChangeSenderFactory,
final MergedSender.Factory mergedSenderFactory, final MergedSender.Factory mergedSenderFactory,
final ReplacePatchSetSender.Factory replacePatchSetFactory, final ReplacePatchSetSender.Factory replacePatchSetFactory,
final GitReferenceUpdated gitRefUpdated, final GitReferenceUpdated gitRefUpdated,
@@ -387,7 +385,6 @@ public class ReceiveCommits {
this.schemaFactory = schemaFactory; this.schemaFactory = schemaFactory;
this.accountResolver = accountResolver; this.accountResolver = accountResolver;
this.optionParserFactory = optionParserFactory; this.optionParserFactory = optionParserFactory;
this.createChangeSenderFactory = createChangeSenderFactory;
this.mergedSenderFactory = mergedSenderFactory; this.mergedSenderFactory = mergedSenderFactory;
this.replacePatchSetFactory = replacePatchSetFactory; this.replacePatchSetFactory = replacePatchSetFactory;
this.gitRefUpdated = gitRefUpdated; this.gitRefUpdated = gitRefUpdated;
@@ -1716,35 +1713,14 @@ public class ReceiveCommits {
ins ins
.setReviewers(recipients.getReviewers()) .setReviewers(recipients.getReviewers())
.setExtraCC(recipients.getCcOnly())
.setApprovals(approvals) .setApprovals(approvals)
.setMessage(msg) .setMessage(msg)
.setSendMail(false) .setRequestScopePropagator(requestScopePropagator)
.setSendMail(true)
.insert(); .insert();
created = true; created = true;
workQueue.getDefaultQueue()
.submit(requestScopePropagator.wrap(new Runnable() {
@Override
public void run() {
try {
CreateChangeSender cm =
createChangeSenderFactory.create(change);
cm.setFrom(me);
cm.setPatchSet(ps, ins.getPatchSetInfo());
cm.addReviewers(recipients.getReviewers());
cm.addExtraCC(recipients.getCcOnly());
cm.send();
} catch (Exception e) {
log.error("Cannot send email for new change " + change.getId(), e);
}
}
@Override
public String toString() {
return "send-email newchange";
}
}));
if (magicBranch != null && magicBranch.isSubmit()) { if (magicBranch != null && magicBranch.isSubmit()) {
submit(projectControl.controlFor(change), ps); submit(projectControl.controlFor(change), ps);
} }