From ae30b5c50aae7004eb707bc8df39403891576704 Mon Sep 17 00:00:00 2001 From: Julian Storer Date: Fri, 19 Aug 2011 14:45:14 +0100 Subject: [PATCH] Made introjucer avoid any version-control files. --- .../Project Saving/jucer_ProjectSaver.h | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h index af24f1319a..3597bb4392 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h @@ -44,13 +44,7 @@ public: generatedFilesGroup.setID (getGeneratedGroupID()); if (generatedCodeFolder.exists()) - { - Array subFiles; - generatedCodeFolder.findChildFiles (subFiles, File::findFilesAndDirectories, false); - - for (int i = subFiles.size(); --i >= 0;) - subFiles.getReference(i).deleteRecursively(); - } + deleteNonHiddenFilesIn (generatedCodeFolder); } Project& getProject() noexcept { return project; } @@ -164,6 +158,47 @@ private: File appConfigFile, binaryDataCpp; + // Recursively clears out a folder's contents, but leaves behind any folders + // containing hidden files used by version-control systems. + static bool deleteNonHiddenFilesIn (const File& parent) + { + bool folderIsNowEmpty = true; + DirectoryIterator i (parent, false, "*", File::findFilesAndDirectories); + Array filesToDelete; + + bool isFolder; + while (i.next (&isFolder, nullptr, nullptr, nullptr, nullptr, nullptr)) + { + const File f (i.getFile()); + + if (shouldFileBeKept (f.getFileName())) + { + folderIsNowEmpty = false; + } + else if (isFolder) + { + if (deleteNonHiddenFilesIn (f)) + filesToDelete.add (f); + else + folderIsNowEmpty = false; + } + else + { + filesToDelete.add (f); + } + } + + for (int j = filesToDelete.size(); --j >= 0;) + filesToDelete.getReference(j).deleteRecursively(); + + return folderIsNowEmpty; + } + + static bool shouldFileBeKept (const String& filename) + { + return filename == ".svn" || filename == ".cvs"; + } + void writeMainProjectFile() { ScopedPointer xml (project.getProjectRoot().createXml());