COMMONSSITE-113: getting site checked in properly
diff --git a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
index 99e95e2..f332c9d 100755
--- a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
+++ b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java
@@ -47,10 +47,7 @@
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * This class checks out the dev distribution location, copies the distributions into that directory
@@ -196,11 +193,32 @@
             getLog().info("Checking out dist from: " + distSvnStagingUrl);
             provider.checkOut(repository, scmFileSet);
             File copiedReleaseNotes = copyReleaseNotesToWorkingDirectory();
-            List<File> filesToCommit = copyDistributionsIntoScmDirectoryStructure(copiedReleaseNotes);
-            filesToCommit.addAll(copySiteToScmDirectory());
+            List<File> filesToCommit = copyDistributionsIntoScmDirectoryStructureAndAddToSvn(copiedReleaseNotes,
+                    provider, repository);
+            List<File> filesToAdd = new ArrayList<>();
+            listFilesAndDirectories(distCheckoutDirectory, filesToAdd);
             if (!dryRun) {
-                commitDirectories(filesToCommit, provider, repository);
-                commitFiles(filesToCommit, provider, repository);
+                ScmFileSet fileSet = new ScmFileSet(distCheckoutDirectory, filesToAdd);
+                AddScmResult addResult = provider.add(
+                        repository,
+                        fileSet
+                );
+                if (!addResult.isSuccess()) {
+                    throw new MojoExecutionException("Failed to add files to scm");
+                }
+                getLog().info("Staging release: " + project.getArtifactId() + ", version: " + project.getVersion());
+                CheckInScmResult checkInResult = provider.checkIn(
+                        repository,
+                        fileSet,
+                        "Staging release: " + project.getArtifactId() + ", version: " + project.getVersion()
+                );
+                if (!checkInResult.isSuccess()) {
+                    getLog().error("Committing dist files failed: " + checkInResult.getCommandOutput());
+                    throw new MojoExecutionException(
+                            "Committing dist files failed: " + checkInResult.getCommandOutput()
+                    );
+                }
+                getLog().info("Committed revision " + checkInResult.getScmRevision());
             } else {
                 getLog().info("[Dry run] Would have committed to: " + distSvnStagingUrl);
                 getLog().info(
@@ -213,103 +231,31 @@
     }
 
     /**
-     * Commits all the directories to SVN from the fileset.
-     *
-     * @param filesToCommit the {@link List} of {@link File} that we find the directories to which we must commit.
-     * @param provider the maven {@link ScmProvider}.
-     * @param repository the maven {@link ScmRepository}.
-     * @throws ScmException if the maven SCM api fails.
-     * @throws MojoExecutionException if we get a failure that does not throw an exception.
+     * Lists all directories and files to a flat list.
+     * @param directory {@link File} containing directory to list
+     * @param files a {@link List} of {@link File} to which to append the files.
      */
-    private void commitDirectories(List<File> filesToCommit, ScmProvider provider, ScmRepository repository)
-            throws ScmException, MojoExecutionException {
-        Collections.sort(filesToCommit);
-        Set<File> committedDirectories = new HashSet<>();
-        for (File file : filesToCommit) {
-            if (file.getAbsolutePath().contains(commonsReleaseVersion + "-" + commonsRcVersion)
-                    && !committedDirectories.contains(file.getParentFile())
-                    && !file.getParentFile().getAbsolutePath().equals(distCheckoutDirectory)) {
-                File parentFile = file.getParentFile();
-                commitParentsIfNotCommitted(parentFile, committedDirectories);
-                ScmFileSet scmFileSetToCommit = new ScmFileSet(distCheckoutDirectory, parentFile);
-                AddScmResult addResult = provider.add(
-                        repository,
-                        scmFileSetToCommit
-                );
-                if (addResult.isSuccess()) {
-                    getLog().info("Adding release directories: "
-                            + project.getArtifactId() + ", version: " + project.getVersion());
-                    CheckInScmResult checkInResult = provider.checkIn(
-                            repository,
-                            scmFileSetToCommit,
-                            "Adding release directories: "
-                                    + project.getArtifactId() + ", version: " + project.getVersion()
-                    );
-                    if (!checkInResult.isSuccess()) {
-                        getLog().error("Committing directories  failed: " + checkInResult.getCommandOutput());
-                        throw new MojoExecutionException(
-                                "Committing directories files failed: " + checkInResult.getCommandOutput()
-                        );
-                    }
-                    committedDirectories.add(parentFile);
-                } else {
-                    getLog().error("Adding directory failed: " + addResult.getCommandOutput());
-                    throw new MojoExecutionException("Adding directory failed: "
-                            + addResult.getCommandOutput());
-                }
+    private void listFilesAndDirectories(File directory, List<File> files) {
+        // Get all the files and directories from a directory.
+        File[] fList = directory.listFiles();
+        for (File file : fList) {
+            if (file.isFile() && !file.getAbsolutePath().contains(".svn")) {
+                files.add(file);
+            } else if (file.isDirectory() && !file.getAbsolutePath().contains(".svn")) {
+                files.add(file);
+                listFilesAndDirectories(file, files);
             }
         }
     }
 
-    private void commitParentsIfNotCommitted(File file, Set<File> committedDirectories) {
-        if (committedDirectories.contains(file.getParentFile())) {
-            return;
-        }
-    }
-
-    /**
-     * Commits files to SVN from the fileset.
-     *
-     * @param filesToCommit the {@link List} of {@link File} we must commit.
-     * @param provider the maven {@link ScmProvider}.
-     * @param repository the maven {@link ScmRepository}.
-     * @throws ScmException if the maven SCM api fails.
-     * @throws MojoExecutionException if we get a failure that does not throw an exception.
-     */
-    private void commitFiles(List<File> filesToCommit, ScmProvider provider, ScmRepository repository)
-            throws ScmException, MojoExecutionException {
-        ScmFileSet scmFileSetToCommit = new ScmFileSet(distCheckoutDirectory, filesToCommit);
-        AddScmResult addResult = provider.add(
-                repository,
-                scmFileSetToCommit
-        );
-        if (addResult.isSuccess()) {
-            getLog().info("Staging release: " + project.getArtifactId() + ", version: " + project.getVersion());
-            CheckInScmResult checkInResult = provider.checkIn(
-                    repository,
-                    scmFileSetToCommit,
-                    "Staging release: " + project.getArtifactId() + ", version: " + project.getVersion()
-            );
-            if (!checkInResult.isSuccess()) {
-                getLog().error("Committing dist files failed: " + checkInResult.getCommandOutput());
-                throw new MojoExecutionException(
-                        "Committing dist files failed: " + checkInResult.getCommandOutput()
-                );
-            }
-            getLog().info("Committed revision " + checkInResult.getScmRevision());
-        } else {
-            getLog().error("Adding dist files failed: " + addResult.getCommandOutput());
-            throw new MojoExecutionException("Adding dist files failed: " + addResult.getCommandOutput());
-        }
-    }
-
     /**
      * A utility method that takes the <code>RELEASE-NOTES.txt</code> file from the base directory of the
      * project and copies it into {@link CommonsDistributionStagingMojo#workingDirectory}.
      *
      * @return the RELEASE-NOTES.txt file that exists in the <code>target/commons-release-notes/scm</code>
      *         directory for the purpose of adding it to the scm change set in the method
-     *         {@link CommonsDistributionStagingMojo#copyDistributionsIntoScmDirectoryStructure(File)}.
+     *         {@link CommonsDistributionStagingMojo#copyDistributionsIntoScmDirectoryStructureAndAddToSvn(File,
+     *         ScmProvider, ScmRepository)}.
      * @throws MojoExecutionException if an {@link IOException} occurs as a wrapper so that maven
      *                                can properly handle the exception.
      */
@@ -343,39 +289,43 @@
      *
      * @param copiedReleaseNotes is the RELEASE-NOTES.txt file that exists in the
      *                           <code>target/commons-release-plugin/scm</code> directory.
+     * @param provider is the {@link ScmProvider} that we will use for adding the files we wish to commit.
+     * @param repository is the {@link ScmRepository} that we will use for adding the files that we wish to commit.
      * @return a {@link List} of {@link File}'s in the directory for the purpose of adding them to the maven
      *         {@link ScmFileSet}.
      * @throws MojoExecutionException if an {@link IOException} occurs so that Maven can handle it properly.
      */
-    private List<File> copyDistributionsIntoScmDirectoryStructure(File copiedReleaseNotes)
+    private List<File> copyDistributionsIntoScmDirectoryStructureAndAddToSvn(File copiedReleaseNotes,
+                                                                             ScmProvider provider,
+                                                                             ScmRepository repository)
             throws MojoExecutionException {
         List<File> workingDirectoryFiles = Arrays.asList(workingDirectory.listFiles());
+        List<File> filesForMavenScmFileSet = new ArrayList<>();
         File scmBinariesRoot = new File(distVersionRcVersionDirectory, "binaries");
         File scmSourceRoot = new File(distVersionRcVersionDirectory, "source");
         SharedFunctions.initDirectory(getLog(), scmBinariesRoot);
         SharedFunctions.initDirectory(getLog(), scmSourceRoot);
-        List<File> filesForMavenScmFileSet = new ArrayList<>();
         File copy;
         for (File file : workingDirectoryFiles) {
             if (file.getName().contains("src")) {
                 copy = new File(scmSourceRoot,  file.getName());
                 SharedFunctions.copyFile(getLog(), file, copy);
-                filesForMavenScmFileSet.add(copy);
+                filesForMavenScmFileSet.add(file);
             } else if (file.getName().contains("bin")) {
                 copy = new File(scmBinariesRoot,  file.getName());
                 SharedFunctions.copyFile(getLog(), file, copy);
-                filesForMavenScmFileSet.add(copy);
+                filesForMavenScmFileSet.add(file);
             } else if (StringUtils.containsAny(file.getName(), "scm", "sha1.properties", "sha256.properties")) {
                 getLog().debug("Not copying scm directory over to the scm directory because it is the scm directory.");
                 //do nothing because we are copying into scm
             } else {
                 copy = new File(distCheckoutDirectory.getAbsolutePath(),  file.getName());
                 SharedFunctions.copyFile(getLog(), file, copy);
-                filesForMavenScmFileSet.add(copy);
+                filesForMavenScmFileSet.add(file);
             }
         }
         filesForMavenScmFileSet.addAll(buildReadmeAndHeaderHtmlFiles());
-        filesForMavenScmFileSet.add(copiedReleaseNotes);
+        filesForMavenScmFileSet.addAll(copySiteToScmDirectory());
         return filesForMavenScmFileSet;
     }