Author: rupprecht Date: Tue Jul 24 13:28:07 2018 New Revision: 337850 URL: http://llvm.org/viewvc/llvm-project?rev=337850&view=rev Log: Revert "[VFS] Cleanups to VFS interfaces."
This reverts commit r337834 due to test failures. Modified: cfe/trunk/include/clang/Basic/VirtualFileSystem.h cfe/trunk/lib/Basic/FileManager.cpp cfe/trunk/lib/Basic/VirtualFileSystem.cpp Modified: cfe/trunk/include/clang/Basic/VirtualFileSystem.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/VirtualFileSystem.h?rev=337850&r1=337849&r2=337850&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/VirtualFileSystem.h (original) +++ cfe/trunk/include/clang/Basic/VirtualFileSystem.h Tue Jul 24 13:28:07 2018 @@ -45,8 +45,7 @@ class MemoryBuffer; namespace clang { namespace vfs { -/// File information from a \p File::status() operation. -/// This is roughly equivalent to a `struct stat` plus a file path. +/// The result of a \p status operation. class Status { std::string Name; llvm::sys::fs::UniqueID UID; @@ -67,14 +66,13 @@ public: llvm::sys::TimePoint<> MTime, uint32_t User, uint32_t Group, uint64_t Size, llvm::sys::fs::file_type Type, llvm::sys::fs::perms Perms); - Status(const llvm::sys::fs::file_status &FSStatus, StringRef Name); - /// Get a copy of a this Status with a different name. - Status copyWithNewName(StringRef NewName); + /// Get a copy of a Status with a different name. + static Status copyWithNewName(const Status &In, StringRef NewName); + static Status copyWithNewName(const llvm::sys::fs::file_status &In, + StringRef NewName); /// Returns the name that should be used for this file or directory. - /// This is usually the path that the file was opened as, without resolving - /// relative paths or symlinks. StringRef getName() const { return Name; } /// @name Status interface from llvm::sys::fs @@ -109,16 +107,15 @@ public: virtual ~File(); /// Get the status of the file. - /// This may access the filesystem (e.g. `stat()`), or return a cached value. virtual llvm::ErrorOr<Status> status() = 0; - /// Get the "real name" of the file, if available. - /// This should be absolute, and typically has symlinks resolved. - /// - /// Only some VFS implementations provide this, and only sometimes. - /// FIXME: these maybe-available semantics are not very useful. It would be - /// nice if this was more consistent with FileSystem::getRealPath(). - virtual llvm::Optional<std::string> getRealPath() { return llvm::None; } + /// Get the name of the file + virtual llvm::ErrorOr<std::string> getName() { + if (auto Status = status()) + return Status->getName().str(); + else + return Status.getError(); + } /// Get the contents of the file as a \p MemoryBuffer. virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Modified: cfe/trunk/lib/Basic/FileManager.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=337850&r1=337849&r2=337850&view=diff ============================================================================== --- cfe/trunk/lib/Basic/FileManager.cpp (original) +++ cfe/trunk/lib/Basic/FileManager.cpp Tue Jul 24 13:28:07 2018 @@ -316,7 +316,7 @@ const FileEntry *FileManager::getFile(St UFE.File = std::move(F); UFE.IsValid = true; if (UFE.File) - if (auto RealPathName = UFE.File->getRealPath()) + if (auto RealPathName = UFE.File->getName()) UFE.RealPathName = *RealPathName; return &UFE; } Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=337850&r1=337849&r2=337850&view=diff ============================================================================== --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original) +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Tue Jul 24 13:28:07 2018 @@ -73,14 +73,16 @@ Status::Status(StringRef Name, UniqueID : Name(Name), UID(UID), MTime(MTime), User(User), Group(Group), Size(Size), Type(Type), Perms(Perms) {} -Status::Status(const file_status &In, StringRef NewName) - : Status(NewName, In.getUniqueID(), In.getLastModificationTime(), - In.getUser(), In.getGroup(), In.getSize(), In.type(), - In.permissions()) {} - -Status Status::copyWithNewName(StringRef NewName) { - return Status(NewName, getUniqueID(), getLastModificationTime(), getUser(), - getGroup(), getSize(), getType(), getPermissions()); +Status Status::copyWithNewName(const Status &In, StringRef NewName) { + return Status(NewName, In.getUniqueID(), In.getLastModificationTime(), + In.getUser(), In.getGroup(), In.getSize(), In.getType(), + In.getPermissions()); +} + +Status Status::copyWithNewName(const file_status &In, StringRef NewName) { + return Status(NewName, In.getUniqueID(), In.getLastModificationTime(), + In.getUser(), In.getGroup(), In.getSize(), In.type(), + In.permissions()); } bool Status::equivalent(const Status &Other) const { @@ -176,7 +178,6 @@ class RealFile : public File { Status S; std::string RealName; - // NewRealPathName is used only if non-empty. RealFile(int FD, StringRef NewName, StringRef NewRealPathName) : FD(FD), S(NewName, {}, {}, {}, {}, {}, llvm::sys::fs::file_type::status_error, {}), @@ -188,7 +189,7 @@ public: ~RealFile() override; ErrorOr<Status> status() override; - Optional<std::string> getRealPath() override; + ErrorOr<std::string> getName() override; ErrorOr<std::unique_ptr<MemoryBuffer>> getBuffer(const Twine &Name, int64_t FileSize, bool RequiresNullTerminator, @@ -206,15 +207,13 @@ ErrorOr<Status> RealFile::status() { file_status RealStatus; if (std::error_code EC = sys::fs::status(FD, RealStatus)) return EC; - S = Status(RealStatus, S.getName()); + S = Status::copyWithNewName(RealStatus, S.getName()); } return S; } -Optional<std::string> RealFile::getRealPath() { - if (RealName.empty()) - return llvm::None; - return RealName; +ErrorOr<std::string> RealFile::getName() { + return RealName.empty() ? S.getName().str() : RealName; } ErrorOr<std::unique_ptr<MemoryBuffer>> @@ -252,7 +251,7 @@ ErrorOr<Status> RealFileSystem::status(c sys::fs::file_status RealStatus; if (std::error_code EC = sys::fs::status(Path, RealStatus)) return EC; - return Status(RealStatus, Path.str()); + return Status::copyWithNewName(RealStatus, Path.str()); } ErrorOr<std::unique_ptr<File>> @@ -304,7 +303,7 @@ public: if (Iter != llvm::sys::fs::directory_iterator()) { llvm::sys::fs::file_status S; std::error_code ErrorCode = llvm::sys::fs::status(Iter->path(), S, true); - CurrentEntry = Status(S, Iter->path()); + CurrentEntry = Status::copyWithNewName(S, Iter->path()); if (!EC) EC = ErrorCode; } @@ -318,7 +317,7 @@ public: } else { llvm::sys::fs::file_status S; std::error_code ErrorCode = llvm::sys::fs::status(Iter->path(), S, true); - CurrentEntry = Status(S, Iter->path()); + CurrentEntry = Status::copyWithNewName(S, Iter->path()); if (!EC) EC = ErrorCode; } @@ -1642,7 +1641,7 @@ static Status getRedirectedFileStatus(co Status ExternalStatus) { Status S = ExternalStatus; if (!UseExternalNames) - S = S.copyWithNewName(Path.str()); + S = Status::copyWithNewName(S, Path.str()); S.IsVFSMapped = true; return S; } @@ -1658,7 +1657,7 @@ ErrorOr<Status> RedirectingFileSystem::s return S; } else { // directory auto *DE = cast<RedirectingDirectoryEntry>(E); - return DE->getStatus().copyWithNewName(Path.str()); + return Status::copyWithNewName(DE->getStatus(), Path.str()); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits