in java/com/google/gerrit/plugins/checks/db/NoteDbChecksUpdate.java [223:277]
private boolean updateNotesMap(
CheckKey checkKey,
CheckUpdate checkUpdate,
Repository repo,
RevWalk rw,
ObjectInserter ins,
ObjectId curr,
CommitBuilder cb,
Operation operation)
throws ConfigInvalidException, IOException, DuplicateKeyException {
Ref patchSetRef = repo.exactRef(checkKey.patchSet().toRefName());
if (patchSetRef == null) {
throw new IOException(String.format("patchset %s not found", checkKey.patchSet()));
}
ObjectId commitId = patchSetRef.getObjectId();
// Read a fresh copy of the notes map
Map<ObjectId, NoteDbCheckMap> newNotes = getRevisionNoteByCommitId(rw, curr);
if (!newNotes.containsKey(commitId)) {
if (operation == Operation.UPDATE) {
throw new IOException(String.format("checker %s not found", checkKey.checkerUuid()));
}
newNotes.put(commitId, NoteDbCheckMap.empty());
}
NoteDbCheckMap checksForRevision = newNotes.get(commitId);
if (!checksForRevision.checks.containsKey(checkKey.checkerUuid().get())) {
if (operation == Operation.UPDATE) {
throw new IOException(String.format("checker %s not found", checkKey.checkerUuid()));
}
// Create check
NoteDbCheck newCheck = NoteDbCheck.createInitialNoteDbCheck(checkUpdate);
newCheck.created = Timestamp.from(personIdent.getWhen().toInstant());
newCheck.updated = newCheck.created;
checksForRevision.checks.put(checkKey.checkerUuid().get(), newCheck);
writeNotesMap(newNotes, cb, ins);
return true;
} else if (operation == Operation.CREATE) {
throw new DuplicateKeyException(
String.format("checker %s already exists", checkKey.checkerUuid()));
}
// Update in place
NoteDbCheck modifiedCheck = checksForRevision.checks.get(checkKey.checkerUuid().get());
boolean dirty = modifiedCheck.applyUpdate(checkUpdate);
if (!dirty) {
return false;
}
modifiedCheck.updated = Timestamp.from(personIdent.getWhen().toInstant());
writeNotesMap(newNotes, cb, ins);
return true;
}