[PATCH] D109128: [VFS] Use original path when falling back to external FS

Duncan P. N. Exon Smith via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 14 11:59:53 PDT 2021


dexonsmith added a comment.

In D109128#3000157 <https://reviews.llvm.org/D109128#3000157>, @JDevlieghere wrote:

> Yes, Keith and I came to the same conclusion yesterday. I was worried about tracking both paths at all times, but I like your suggestion of only changing the path when requested.

Another idea that could be useful would be to add a type:

  struct CanonicalizedPath {
    StringRef OriginalPath;
    StringRef CanonicalPath;
  };

and add an overload for `vfs::FileSystem::openFileForRead` that takes this type.

- The default implementation in `vfs::FileSystem` could call `openFileForRead(.Canonical)` and then do a `File::getWithPath(.Original)` (as with my idea above, just when `File::getPath` matches `.Canonical` and `.Canonical!=.Original`).
- CanonicalizedPath-aware derived classes would invert the relationship. `openFileForRead(FilesystemLookupPath)` would use `CanonicalPath` for lookup, use `OriginalPath` for creating `File`, and pass through (a potentially updated!) `CanonicalizedPath` to base filesystems... and implement `openFileForRead(Twine)` by calling `canonicalizePath`.

Seems like a bit more code, but maybe not much, and the resulting logic might(?) be easier to reason about. (maybe a different name than openFileForRead would be better for clarity, rather than an overload?)

(Probably similar to your idea about tracking both paths at all times, but I'm not sure that needs to be mutually exclusive)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109128/new/

https://reviews.llvm.org/D109128



More information about the cfe-commits mailing list