private Set findDeletableDirectories()

in src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java [273:319]


    private Set<String> findDeletableDirectories(FileSet fileSet) {
        if (verbose) {
            logger.info("Scanning for deletable directories.");
        }

        DirectoryScanner scanner = scan(fileSet);

        if (scanner == null) {
            return Collections.emptySet();
        }

        Set<String> includes = new HashSet<>(Arrays.asList(scanner.getIncludedDirectories()));
        List<String> excludes = new ArrayList<>(Arrays.asList(scanner.getExcludedDirectories()));
        List<String> linksForDeletion = new ArrayList<>();

        if (!fileSet.isFollowSymlinks()) {
            if (verbose) {
                logger.info("Adding symbolic link dirs which were previously excluded" + " to the list being deleted.");
            }

            // we need to see which entries were only excluded because they're symlinks...
            scanner.setFollowSymlinks(true);
            scanner.scan();

            if (logger.isDebugEnabled()) {
                logger.debug("Originally marked for delete: " + includes);
                logger.debug("Marked for preserve (with followSymlinks == false): " + excludes);
            }

            List<String> includedDirsAndSymlinks = Arrays.asList(scanner.getIncludedDirectories());

            linksForDeletion.addAll(excludes);
            linksForDeletion.retainAll(includedDirsAndSymlinks);

            if (logger.isDebugEnabled()) {
                logger.debug("Symlinks marked for deletion (originally mismarked): " + linksForDeletion);
            }

            excludes.removeAll(includedDirsAndSymlinks);
        }

        excludeParentDirectoriesOfExcludedPaths(excludes, includes);

        includes.addAll(linksForDeletion);

        return includes;
    }