Revert: Send email from batch update operation

Change-Id: I1b222a28fc648beecfff523397713e856c60b12a
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-02-16 13:59:20 +01:00
parent 0242ab9443
commit e8d5d82505

View File

@@ -38,6 +38,7 @@ import com.google.gerrit.server.PatchSetUtil;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.git.BatchUpdate;
import com.google.gerrit.server.git.BatchUpdate.ChangeContext;
import com.google.gerrit.server.git.BatchUpdate.Context;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.git.validators.CommitValidators;
@@ -169,14 +170,13 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
revertCommitBuilder.setMessage(
ChangeIdUtil.insertId(message, computedChangeId, true));
ChangeInserter ins;
Change.Id changeId = new Change.Id(seq.nextChangeId());
try (ObjectInserter oi = git.newObjectInserter()) {
ObjectId id = oi.insert(revertCommitBuilder);
oi.flush();
RevCommit revertCommit = revWalk.parseCommit(id);
ins = changeInserterFactory.create(
ChangeInserter ins = changeInserterFactory.create(
changeId, revertCommit, ctl.getChange().getDest().get())
.setValidatePolicy(CommitValidators.Policy.GERRIT)
.setTopic(changeToRevert.getTopic());
@@ -186,21 +186,12 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
db.get(), project, user, now)) {
bu.setRepository(git, revWalk, oi);
bu.insertChange(ins);
bu.addOp(changeId, new SendEmailOp(ins));
bu.addOp(changeToRevert.getId(),
new PostRevertedMessageOp(computedChangeId));
bu.execute();
}
}
try {
RevertedSender cm = revertedSenderFactory.create(project, changeId);
cm.setFrom(user.getAccountId());
cm.setChangeMessage(ins.getChangeMessage());
cm.send();
} catch (Exception err) {
log.error("Cannot send email for revert change " + changeId, err);
}
return changeId;
} catch (RepositoryNotFoundException e) {
throw new ResourceNotFoundException(changeIdToRevert.toString(), e);
@@ -220,6 +211,28 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
return change != null ? change.getStatus().name().toLowerCase() : "deleted";
}
private class SendEmailOp extends BatchUpdate.Op {
private final ChangeInserter ins;
public SendEmailOp(ChangeInserter ins) {
this.ins = ins;
}
@Override
public void postUpdate(Context ctx) throws Exception {
Change.Id changeId = ins.getChange().getId();
try {
RevertedSender cm =
revertedSenderFactory.create(ctx.getProject(), changeId);
cm.setFrom(ctx.getUser().getAccountId());
cm.setChangeMessage(ins.getChangeMessage());
cm.send();
} catch (Exception err) {
log.error("Cannot send email for revert change " + changeId, err);
}
}
}
private class PostRevertedMessageOp extends BatchUpdate.Op {
private final ObjectId computedChangeId;