Please also include a link to the test failure in the commit message or this email thread.
On Tue, Jul 24, 2018 at 10:28 PM Jordan Rupprecht via cfe-commits < cfe-commits@lists.llvm.org> wrote: > 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 >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits