clang-replace: Delete change description files
Added a command line option "-remove-change-desc-files" that triggers
the deletion of the change description files after merging and applying
regardless of success.
Differential Revision: http://llvm-reviews.chandlerc.com/D1492
llvm-svn: 189268
diff --git a/clang-tools-extra/clang-replace/tool/ClangReplaceMain.cpp b/clang-tools-extra/clang-replace/tool/ClangReplaceMain.cpp
index dae4652..bd6adca 100644
--- a/clang-tools-extra/clang-replace/tool/ClangReplaceMain.cpp
+++ b/clang-tools-extra/clang-replace/tool/ClangReplaceMain.cpp
@@ -25,6 +25,29 @@
static cl::opt<std::string> Directory(cl::Positional, cl::Required,
cl::desc("<Search Root Directory>"));
+static cl::opt<bool> RemoveTUReplacementFiles(
+ "remove-change-desc-files",
+ cl::desc("Remove the change description files regardless of successful\n"
+ "merging/replacing."),
+ cl::init(false));
+
+// Helper object to remove the TUReplacement files (triggered by
+// "remove-change-desc-files" command line option) when exiting current scope.
+class ScopedFileRemover {
+public:
+ ScopedFileRemover(const TUReplacementFiles &Files,
+ clang::DiagnosticsEngine &Diagnostics)
+ : TURFiles(Files), Diag(Diagnostics) {}
+
+ ~ScopedFileRemover() {
+ deleteReplacementFiles(TURFiles, Diag);
+ }
+
+private:
+ const TUReplacementFiles &TURFiles;
+ clang::DiagnosticsEngine &Diag;
+};
+
int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv);
@@ -34,9 +57,10 @@
DiagOpts.getPtr());
TUReplacements TUs;
+ TUReplacementFiles TURFiles;
error_code ErrorCode =
- collectReplacementsFromDirectory(Directory, TUs, Diagnostics);
+ collectReplacementsFromDirectory(Directory, TUs, TURFiles, Diagnostics);
if (ErrorCode) {
errs() << "Trouble iterating over directory '" << Directory
@@ -44,6 +68,12 @@
return false;
}
+ // Remove the TUReplacementFiles (triggered by "remove-change-desc-files"
+ // command line option) when exiting main().
+ OwningPtr<ScopedFileRemover> Remover;
+ if (RemoveTUReplacementFiles)
+ Remover.reset(new ScopedFileRemover(TURFiles, Diagnostics));
+
FileManager Files((FileSystemOptions()));
SourceManager SM(Diagnostics, Files);