private static boolean visit(final Repository repository, final TreeWalk walk, final MutableObjectId id, final String path, final ITreeVisitor visitor) throws IOException { while (walk.next()) { if (walk.isPostChildren()) break; if (walk.isSubtree()) { final String subTreePath = walk.getPathString(); walk.enterSubtree(); if (!visit(repository, walk, id, subTreePath, visitor)) return false; } walk.getObjectId(id, 0); if (!visitor.accept(walk.getFileMode(0), path, walk.getNameString(), id)) return false; } return true; } }