[lldb/Reproducers] Always record the current working directory
authorJonas Devlieghere <jonas@devlieghere.com>
Mon, 20 Jul 2020 18:23:43 +0000 (11:23 -0700)
committerJonas Devlieghere <jonas@devlieghere.com>
Mon, 20 Jul 2020 18:54:11 +0000 (11:54 -0700)
Setting the current working directory in the VFS will fail if the given
path doesn't exist in the YAML mapping or on disk.

lldb/include/lldb/Utility/Reproducer.h
lldb/source/API/SBReproducer.cpp
lldb/source/Initialization/SystemInitializerCommon.cpp
lldb/test/Shell/Reproducer/TestWorkingDir.test

index 2714db8..6fcb839 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "lldb/Utility/FileSpec.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/FileCollector.h"
 #include "llvm/Support/YAMLTraits.h"
@@ -149,6 +150,7 @@ public:
   }
 
   void Update(llvm::StringRef path) { m_cwd = std::string(path); }
+  llvm::StringRef GetWorkingDirectory() { return m_cwd; }
 
   struct Info {
     static const char *name;
index 0eb3429..9815bf1 100644 (file)
@@ -234,7 +234,10 @@ const char *SBReproducer::GetPath() {
 
 void SBReproducer::SetWorkingDirectory(const char *path) {
   if (auto *g = lldb_private::repro::Reproducer::Instance().GetGenerator()) {
-    g->GetOrCreate<WorkingDirectoryProvider>().Update(path);
+    auto &wp = g->GetOrCreate<repro::WorkingDirectoryProvider>();
+    wp.Update(path);
+    auto &fp = g->GetOrCreate<repro::FileProvider>();
+    fp.RecordInterestingDirectory(wp.GetWorkingDirectory());
   }
 }
 
index 0cef2a4..3d07f92 100644 (file)
@@ -94,6 +94,8 @@ llvm::Error SystemInitializerCommon::Initialize() {
     vp.SetVersion(lldb_private::GetVersion());
     repro::FileProvider &fp = g->GetOrCreate<repro::FileProvider>();
     FileSystem::Initialize(fp.GetFileCollector());
+    repro::WorkingDirectoryProvider &wp = g->GetOrCreate<repro::WorkingDirectoryProvider>();
+    fp.RecordInterestingDirectory(wp.GetWorkingDirectory());
   } else {
     FileSystem::Initialize();
   }
index 1d4c769..76df41f 100644 (file)
 
 # RUN: cat %t.repro/cwd.txt | FileCheck %t.check
 # RUN: %lldb --replay %t.repro | FileCheck %t.check
+
+# Make sure the current working directory is recorded even when it's not
+# referenced.
+
+# RUN: rm -rf %t.repro
+# RUN: mkdir -p %t/probably_unique
+# RUN: cd %t/probably_unique
+# RUN: %lldb -x -b -o 'reproducer generate' --capture --capture-path %t.repro
+# RUN: cat %t.repro/cwd.txt | FileCheck %s
+# CHECK: probably_unique