in src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java [153:168]
private boolean isNonFastForwardUpdate(RefUpdatedEvent event, ProjectResource project)
throws RepositoryNotFoundException, IOException {
if (isRefDeleted(event)) {
// Can't be non-fast-forward if the ref was deleted, and
// attempting a check would cause a MissingObjectException.
return false;
}
RefUpdateAttribute refUpdate = event.refUpdate.get();
try (Repository repo = repoManager.openRepository(project.getNameKey())) {
try (RevWalk walk = new RevWalk(repo)) {
RevCommit oldCommit = walk.parseCommit(repo.resolve(refUpdate.oldRev));
RevCommit newCommit = walk.parseCommit(repo.resolve(refUpdate.newRev));
return !walk.isMergedInto(oldCommit, newCommit);
}
}
}