private void update()

in src/main/java/org/apache/maven/plugins/scmpublish/ScmPublishPublishScmMojo.java [87:154]


    private void update(File checkout, File dir, List<String> doNotDeleteDirs) throws IOException {
        String scmSpecificFilename = scmProvider.getScmSpecificFilename();
        String[] files = scmSpecificFilename != null
                ? checkout.list(new NotFileFilter(new NameFileFilter(scmSpecificFilename)))
                : checkout.list();

        Set<String> checkoutContent = new HashSet<>(Arrays.asList(files));
        List<String> dirContent = (dir != null) ? Arrays.asList(dir.list()) : Collections.emptyList();

        Set<String> deleted = new HashSet<>(checkoutContent);
        deleted.removeAll(dirContent);

        MatchPatterns ignoreDeleteMatchPatterns = null;
        List<String> pathsAsList = new ArrayList<>(0);
        if (ignorePathsToDelete != null && ignorePathsToDelete.length > 0) {
            ignoreDeleteMatchPatterns = MatchPatterns.from(ignorePathsToDelete);
            pathsAsList = Arrays.asList(ignorePathsToDelete);
        }

        for (String name : deleted) {
            if (ignoreDeleteMatchPatterns != null && ignoreDeleteMatchPatterns.matches(name, true)) {
                getLog().debug(name + " match one of the patterns '" + pathsAsList + "': do not add to deleted files");
                continue;
            }
            getLog().debug("file marked for deletion: " + name);
            File file = new File(checkout, name);

            if ((doNotDeleteDirs != null) && file.isDirectory() && (doNotDeleteDirs.contains(name))) {
                // ignore directory not available
                continue;
            }

            if (file.isDirectory()) {
                update(file, null, null);
            }
            this.deleted.add(file);
        }

        for (String name : dirContent) {
            File file = new File(checkout, name);
            File source = new File(dir, name);

            if (Files.isSymbolicLink(source.toPath())) {
                if (!checkoutContent.contains(name)) {
                    this.added.add(file);
                }

                // copy symbolic link (Java 7 only)
                copySymLink(source, file);
            } else if (source.isDirectory()) {
                directories++;
                if (!checkoutContent.contains(name)) {
                    this.added.add(file);
                    file.mkdir();
                }

                update(file, source, null);
            } else {
                if (checkoutContent.contains(name)) {
                    this.updated.add(file);
                } else {
                    this.added.add(file);
                }

                copyFile(source, file);
            }
        }
    }