in src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java [486:527]
private Path walkDir(final WalkKey key, final List<Path> collectedFiles, final Set<WalkKey> visitedDirs)
throws IOException {
return Files.walkFileTree(key.getPath(), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes basicFileAttributes)
throws IOException {
WalkKey currentDirKey =
new WalkKey(path.toAbsolutePath().normalize(), key.getGlob(), key.isRecursive());
if (isHidden(path)) {
LOGGER.debug("Skipping subtree (hidden): {}", path);
return FileVisitResult.SKIP_SUBTREE;
} else if (!isReadable(path)) {
LOGGER.debug("Skipping subtree (not readable): {}", path);
return FileVisitResult.SKIP_SUBTREE;
} else if (isFilteredOutSubpath(path)) {
LOGGER.debug("Skipping subtree (blacklisted): {}", path);
return FileVisitResult.SKIP_SUBTREE;
} else if (visitedDirs.contains(currentDirKey)) {
LOGGER.debug("Skipping subtree (visited): {}", path);
return FileVisitResult.SKIP_SUBTREE;
}
walkDirectoryFiles(path, collectedFiles, key.getGlob(), entry -> filteredOutPaths.stream()
.anyMatch(it -> it.getFileName().equals(entry.getFileName())));
if (!key.isRecursive()) {
LOGGER.debug("Skipping subtree (non recursive): {}", path);
return FileVisitResult.SKIP_SUBTREE;
}
LOGGER.debug("Visiting subtree: {}", path);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path path, IOException exc) throws IOException {
LOGGER.debug("Skipping subtree (exception: {}): {}", exc, path);
return FileVisitResult.SKIP_SUBTREE;
}
});
}