Revert: Post message on reverted change from batch update operation

Change-Id: I7603e98ab87d9d44b391fdad93c2101538b41c71
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-02-16 13:49:06 +01:00
parent 4d755ef5f5
commit 0242ab9443

View File

@@ -37,11 +37,11 @@ import com.google.gerrit.server.GerritPersonIdent;
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.GitRepositoryManager;
import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.git.validators.CommitValidators;
import com.google.gerrit.server.mail.RevertedSender;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.project.RefControl;
@@ -75,7 +75,6 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
private final GitRepositoryManager repoManager;
private final ChangeInserter.Factory changeInserterFactory;
private final ChangeMessagesUtil cmUtil;
private final ChangeUpdate.Factory changeUpdateFactory;
private final BatchUpdate.Factory updateFactory;
private final Sequences seq;
private final PatchSetUtil psUtil;
@@ -88,7 +87,6 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
GitRepositoryManager repoManager,
ChangeInserter.Factory changeInserterFactory,
ChangeMessagesUtil cmUtil,
ChangeUpdate.Factory changeUpdateFactory,
BatchUpdate.Factory updateFactory,
Sequences seq,
PatchSetUtil psUtil,
@@ -99,7 +97,6 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
this.repoManager = repoManager;
this.changeInserterFactory = changeInserterFactory;
this.cmUtil = cmUtil;
this.changeUpdateFactory = changeUpdateFactory;
this.updateFactory = updateFactory;
this.seq = seq;
this.psUtil = psUtil;
@@ -172,38 +169,25 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
revertCommitBuilder.setMessage(
ChangeIdUtil.insertId(message, computedChangeId, true));
RevCommit revertCommit;
ChangeInserter ins;
Change.Id changeId = new Change.Id(seq.nextChangeId());
try (ObjectInserter oi = git.newObjectInserter()) {
ObjectId id = oi.insert(revertCommitBuilder);
oi.flush();
revertCommit = revWalk.parseCommit(id);
RevCommit revertCommit = revWalk.parseCommit(id);
ins = changeInserterFactory.create(
changeId, revertCommit, ctl.getChange().getDest().get())
.setValidatePolicy(CommitValidators.Policy.GERRIT)
.setTopic(changeToRevert.getTopic());
ChangeMessage changeMessage = new ChangeMessage(
new ChangeMessage.Key(
patchSetId.getParentKey(), ChangeUtil.messageUUID(db.get())),
user.getAccountId(), now, patchSetId);
StringBuilder msgBuf = new StringBuilder();
msgBuf.append("Patch Set ").append(patchSetId.get()).append(": Reverted");
msgBuf.append("\n\n");
msgBuf.append("This patchset was reverted in change: ")
.append("I").append(computedChangeId.name());
changeMessage.setMessage(msgBuf.toString());
ChangeUpdate update = changeUpdateFactory.create(ctl, now);
cmUtil.addChangeMessage(db.get(), update, changeMessage);
update.commit();
ins.setMessage("Uploaded patch set 1.");
try (BatchUpdate bu = updateFactory.create(
db.get(), project, user, now)) {
bu.setRepository(git, revWalk, oi);
bu.insertChange(ins);
bu.addOp(changeToRevert.getId(),
new PostRevertedMessageOp(computedChangeId));
bu.execute();
}
}
@@ -234,5 +218,33 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
private static String status(Change change) {
return change != null ? change.getStatus().name().toLowerCase() : "deleted";
}
}
}
private class PostRevertedMessageOp extends BatchUpdate.Op {
private final ObjectId computedChangeId;
public PostRevertedMessageOp(ObjectId computedChangeId) {
this.computedChangeId = computedChangeId;
}
@Override
public boolean updateChange(ChangeContext ctx) throws Exception {
Change change = ctx.getChange();
PatchSet.Id patchSetId = change.currentPatchSetId();
ChangeMessage changeMessage = new ChangeMessage(
new ChangeMessage.Key(change.getId(),
ChangeUtil.messageUUID(db.get())),
ctx.getUser().getAccountId(), ctx.getWhen(), patchSetId);
StringBuilder msgBuf = new StringBuilder();
msgBuf.append("Patch Set ").append(patchSetId.get())
.append(": Reverted");
msgBuf.append("\n\n");
msgBuf.append("This patchset was reverted in change: ")
.append("I").append(computedChangeId.name());
changeMessage.setMessage(msgBuf.toString());
cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(patchSetId),
changeMessage);
return true;
}
}
}