in src/main/java/org/apache/maven/plugins/clean/Cleaner.java [206:256]
private Result delete(
File file,
String pathname,
Selector selector,
boolean followSymlinks,
boolean failOnError,
boolean retryOnError)
throws IOException {
Result result = new Result();
boolean isDirectory = file.isDirectory();
if (isDirectory) {
if (selector == null || selector.couldHoldSelected(pathname)) {
if (followSymlinks || !isSymbolicLink(file.toPath())) {
File canonical = followSymlinks ? file : file.getCanonicalFile();
String[] filenames = canonical.list();
if (filenames != null) {
String prefix = pathname.length() > 0 ? pathname + File.separatorChar : "";
for (int i = filenames.length - 1; i >= 0; i--) {
String filename = filenames[i];
File child = new File(canonical, filename);
result.update(delete(
child, prefix + filename, selector, followSymlinks, failOnError, retryOnError));
}
}
} else if (logDebug != null) {
logDebug.log("Not recursing into symlink " + file);
}
} else if (logDebug != null) {
logDebug.log("Not recursing into directory without included files " + file);
}
}
if (!result.excluded && (selector == null || selector.isSelected(pathname))) {
if (logVerbose != null) {
if (isDirectory) {
logVerbose.log("Deleting directory " + file);
} else if (file.exists()) {
logVerbose.log("Deleting file " + file);
} else {
logVerbose.log("Deleting dangling symlink " + file);
}
}
result.failures += delete(file, failOnError, retryOnError);
} else {
result.excluded = true;
}
return result;
}