[FileCollector] move Root creation
authorJan Korous <jkorous@apple.com>
Wed, 29 Apr 2020 18:44:40 +0000 (11:44 -0700)
committerJan Korous <jkorous@apple.com>
Wed, 29 Apr 2020 18:47:23 +0000 (11:47 -0700)
If we don't handle the errors we can't rely on the directory being created early anyway.

Differential Revision: https://reviews.llvm.org/D78959

llvm/include/llvm/Support/FileCollector.h
llvm/lib/Support/FileCollector.cpp

index 3a8741c..30e3470 100644 (file)
@@ -23,6 +23,7 @@ class FileCollectorFileSystem;
 /// the VFS.
 class FileCollector {
 public:
+  /// \p Root directory gets created in copyFiles unless it already exists.
   FileCollector(std::string Root, std::string OverlayRoot);
 
   void addFile(const Twine &file);
index e13a7b5..cb83d84 100644 (file)
@@ -34,7 +34,6 @@ static bool isCaseSensitivePath(StringRef Path) {
 
 FileCollector::FileCollector(std::string Root, std::string OverlayRoot)
     : Root(std::move(Root)), OverlayRoot(std::move(OverlayRoot)) {
-  sys::fs::create_directories(this->Root, true);
 }
 
 bool FileCollector::getRealPath(StringRef SrcPath,
@@ -150,6 +149,11 @@ copyAccessAndModificationTime(StringRef Filename,
 }
 
 std::error_code FileCollector::copyFiles(bool StopOnError) {
+  auto Err = sys::fs::create_directories(Root, /*IgnoreExisting=*/true);
+  if (Err) {
+    return Err;
+  }
+
   std::lock_guard<std::mutex> lock(Mutex);
 
   for (auto &entry : VFSWriter.getMappings()) {