in src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java [152:186]
private void closeChange(
Project.NameKey project, PatchSet.Id psId, String sha1, SubmissionId submissionId)
throws IOException, RepositoryNotFoundException, RestApiException, UpdateException,
PermissionBackendException {
ChangeNotes changeNotes = notesFactory.createChecked(project, psId.changeId());
permissionBackend.user(user).change(changeNotes).check(ChangePermission.READ);
Change change = changeNotes.getChange();
PatchSet ps = psUtil.get(changeNotes, psId);
if (change == null || ps == null) {
log.atSevere().log("%s is missing", psId);
return;
}
if (change.getStatus() == Change.Status.MERGED
|| change.getStatus() == Change.Status.ABANDONED) {
return;
}
try (TraceContext traceContext =
TraceContext.open()
.addTag(RequestId.Type.SUBMISSION_ID, new RequestId(change.getId().toString()));
Repository repo = repoManager.openRepository(project);
BatchUpdate bu = batchUpdateFactory.create(project, user, TimeUtil.nowTs());
ObjectInserter ins = repo.newObjectInserter();
ObjectReader reader = ins.newReader();
RevWalk walk = new RevWalk(reader)) {
bu.setRepository(repo, walk, ins);
bu.setRefLogMessage("merged (batch submit)");
bu.addOp(
psId.changeId(),
mergedByPushOpFactory.create(
requestScopePropagator, psId, submissionId, change.getDest().branch(), sha1));
bu.execute();
}
}