[llvm] r346372 - Extend virtual file system with `isLocal` method
Jonas Devlieghere via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 7 16:01:32 PST 2018
Author: jdevlieghere
Date: Wed Nov 7 16:01:32 2018
New Revision: 346372
URL: http://llvm.org/viewvc/llvm-project?rev=346372&view=rev
Log:
Extend virtual file system with `isLocal` method
Expose the `llvm::sys::fs::is_local` function through the VFS.
Differential revision: https://reviews.llvm.org/D54127
Modified:
llvm/trunk/include/llvm/Support/VirtualFileSystem.h
llvm/trunk/lib/Support/VirtualFileSystem.cpp
llvm/trunk/unittests/Support/VirtualFileSystemTest.cpp
Modified: llvm/trunk/include/llvm/Support/VirtualFileSystem.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/VirtualFileSystem.h?rev=346372&r1=346371&r2=346372&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/VirtualFileSystem.h (original)
+++ llvm/trunk/include/llvm/Support/VirtualFileSystem.h Wed Nov 7 16:01:32 2018
@@ -279,6 +279,9 @@ public:
/// Check whether a file exists. Provided for convenience.
bool exists(const Twine &Path);
+ /// Is the file mounted on a local filesystem?
+ virtual std::error_code isLocal(const Twine &Path, bool &Result);
+
/// Make \a Path an absolute path.
///
/// Makes \a Path absolute using the current directory if it is not already.
@@ -326,6 +329,7 @@ public:
directory_iterator dir_begin(const Twine &Dir, std::error_code &EC) override;
llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override;
std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
+ std::error_code isLocal(const Twine &Path, bool &Result) override;
std::error_code getRealPath(const Twine &Path,
SmallVectorImpl<char> &Output) const override;
@@ -463,7 +467,7 @@ public:
/// system.
std::error_code getRealPath(const Twine &Path,
SmallVectorImpl<char> &Output) const override;
-
+ std::error_code isLocal(const Twine &Path, bool &Result) override;
std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
};
Modified: llvm/trunk/lib/Support/VirtualFileSystem.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/VirtualFileSystem.cpp?rev=346372&r1=346371&r2=346372&view=diff
==============================================================================
--- llvm/trunk/lib/Support/VirtualFileSystem.cpp (original)
+++ llvm/trunk/lib/Support/VirtualFileSystem.cpp Wed Nov 7 16:01:32 2018
@@ -136,6 +136,10 @@ std::error_code FileSystem::getRealPath(
return errc::operation_not_permitted;
}
+std::error_code FileSystem::isLocal(const Twine &Path, bool &Result) {
+ return errc::operation_not_permitted;
+}
+
bool FileSystem::exists(const Twine &Path) {
auto Status = status(Path);
return Status && Status->exists();
@@ -233,6 +237,7 @@ public:
llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override;
std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
+ std::error_code isLocal(const Twine &Path, bool &Result) override;
std::error_code getRealPath(const Twine &Path,
SmallVectorImpl<char> &Output) const override;
@@ -288,6 +293,10 @@ std::error_code RealFileSystem::setCurre
return std::error_code();
}
+std::error_code RealFileSystem::isLocal(const Twine &Path, bool &Result) {
+ return llvm::sys::fs::is_local(Path, Result);
+}
+
std::error_code
RealFileSystem::getRealPath(const Twine &Path,
SmallVectorImpl<char> &Output) const {
@@ -377,6 +386,13 @@ OverlayFileSystem::setCurrentWorkingDire
return {};
}
+std::error_code OverlayFileSystem::isLocal(const Twine &Path, bool &Result) {
+ for (auto &FS : FSList)
+ if (FS->exists(Path))
+ return FS->isLocal(Path, Result);
+ return errc::no_such_file_or_directory;
+}
+
std::error_code
OverlayFileSystem::getRealPath(const Twine &Path,
SmallVectorImpl<char> &Output) const {
@@ -913,6 +929,11 @@ InMemoryFileSystem::getRealPath(const Tw
return {};
}
+std::error_code InMemoryFileSystem::isLocal(const Twine &Path, bool &Result) {
+ Result = false;
+ return {};
+}
+
} // namespace vfs
} // namespace llvm
@@ -1170,6 +1191,10 @@ public:
return ExternalFS->setCurrentWorkingDirectory(Path);
}
+ std::error_code isLocal(const Twine &Path, bool &Result) override {
+ return ExternalFS->isLocal(Path, Result);
+ }
+
directory_iterator dir_begin(const Twine &Dir, std::error_code &EC) override {
ErrorOr<Entry *> E = lookupPath(Dir);
if (!E) {
Modified: llvm/trunk/unittests/Support/VirtualFileSystemTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/VirtualFileSystemTest.cpp?rev=346372&r1=346371&r2=346372&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/VirtualFileSystemTest.cpp (original)
+++ llvm/trunk/unittests/Support/VirtualFileSystemTest.cpp Wed Nov 7 16:01:32 2018
@@ -885,6 +885,17 @@ TEST_F(InMemoryFileSystemTest, WorkingDi
getPosixPath(NormalizedFS.getCurrentWorkingDirectory().get()));
}
+TEST_F(InMemoryFileSystemTest, IsLocal) {
+ FS.setCurrentWorkingDirectory("/b");
+ FS.addFile("c", 0, MemoryBuffer::getMemBuffer(""));
+
+ std::error_code EC;
+ bool IsLocal = true;
+ EC = FS.isLocal("c", IsLocal);
+ ASSERT_FALSE(EC);
+ ASSERT_FALSE(IsLocal);
+}
+
#if !defined(_WIN32)
TEST_F(InMemoryFileSystemTest, GetRealPath) {
SmallString<16> Path;
More information about the llvm-commits
mailing list