forked from OSchip/llvm-project
[lldb/Reproducers] Always record the current working directory
Setting the current working directory in the VFS will fail if the given path doesn't exist in the YAML mapping or on disk.
This commit is contained in:
parent
3f16114ddb
commit
f8df2e1a19
lldb
include/lldb/Utility
source
test/Shell/Reproducer
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "lldb/Utility/FileSpec.h"
|
#include "lldb/Utility/FileSpec.h"
|
||||||
#include "llvm/ADT/DenseMap.h"
|
#include "llvm/ADT/DenseMap.h"
|
||||||
|
#include "llvm/ADT/StringRef.h"
|
||||||
#include "llvm/Support/Error.h"
|
#include "llvm/Support/Error.h"
|
||||||
#include "llvm/Support/FileCollector.h"
|
#include "llvm/Support/FileCollector.h"
|
||||||
#include "llvm/Support/YAMLTraits.h"
|
#include "llvm/Support/YAMLTraits.h"
|
||||||
|
@ -149,6 +150,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update(llvm::StringRef path) { m_cwd = std::string(path); }
|
void Update(llvm::StringRef path) { m_cwd = std::string(path); }
|
||||||
|
llvm::StringRef GetWorkingDirectory() { return m_cwd; }
|
||||||
|
|
||||||
struct Info {
|
struct Info {
|
||||||
static const char *name;
|
static const char *name;
|
||||||
|
|
|
@ -234,7 +234,10 @@ const char *SBReproducer::GetPath() {
|
||||||
|
|
||||||
void SBReproducer::SetWorkingDirectory(const char *path) {
|
void SBReproducer::SetWorkingDirectory(const char *path) {
|
||||||
if (auto *g = lldb_private::repro::Reproducer::Instance().GetGenerator()) {
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,8 @@ llvm::Error SystemInitializerCommon::Initialize() {
|
||||||
vp.SetVersion(lldb_private::GetVersion());
|
vp.SetVersion(lldb_private::GetVersion());
|
||||||
repro::FileProvider &fp = g->GetOrCreate<repro::FileProvider>();
|
repro::FileProvider &fp = g->GetOrCreate<repro::FileProvider>();
|
||||||
FileSystem::Initialize(fp.GetFileCollector());
|
FileSystem::Initialize(fp.GetFileCollector());
|
||||||
|
repro::WorkingDirectoryProvider &wp = g->GetOrCreate<repro::WorkingDirectoryProvider>();
|
||||||
|
fp.RecordInterestingDirectory(wp.GetWorkingDirectory());
|
||||||
} else {
|
} else {
|
||||||
FileSystem::Initialize();
|
FileSystem::Initialize();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,3 +15,13 @@
|
||||||
|
|
||||||
# RUN: cat %t.repro/cwd.txt | FileCheck %t.check
|
# RUN: cat %t.repro/cwd.txt | FileCheck %t.check
|
||||||
# RUN: %lldb --replay %t.repro | 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
|
||||||
|
|
Loading…
Reference in New Issue