sapling/eden/fs/utils
Saul Gutierrez 62c802bfdc symlinks: handle symlinks with absolute paths
Summary:
This allows hg on EdenFS to be able to create symlinks with absolute paths on Windows as well as check out commits with absolute path symlinks.

There are a few caveats here:
- Symlinks with absolute paths will only be usable on the same type of OS (Windows vs. POSIX) they were created.
- Checking out commits with absolute paths created on POSIX (i.e., starting with `/`) aren't usable on Windows
- Symlinks with absolute paths created on Windows will keep the same drive letter across different checkouts.
  - E.g., if the root of the EdenFS checkout is somewhere at `C:\` and there is a symlink pointing to somewhere like `D:\foo\bar.txt`, and then that same commit is checked out in a different Windows machine with that same repo mounted at `E:\`, that symlink will still point to `D:\foo\bar.txt`

If there seems to be some UNC wonkiness in this commit, it is because UNC usage on symlinks is quite inconsistent on Windows:
- Things that use UNC for absolute path symlinks:
  - Windows' `mklink` command (creates symlinks with UNC paths)
  - Python's `os.symlink` (same as above)
  - Hg commits
  - EdenFS (when stored as Inodes; some functions like `realpath`)
- Things that don't use UNC for absolute path symlinks:
  - `PrjWritePlaceholderInfo2`
  - `PrjFillDirEntryBuffer2`
  - `std::filesystem::read_symlink`

Reviewed By: xavierd

Differential Revision: D47227590

fbshipit-source-id: b92c8462ad3f13c2724b76ee61f8c095695027cd
2023-08-01 13:59:20 -07:00
..
test add a test to illustrate the danger of QueuedImmediateExecutor 2023-07-21 16:54:31 -07:00
BucketedLog.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
BufVec.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Bug.cpp break EDEN_BUG dependency on folly/Conv 2022-12-08 17:11:17 -08:00
Bug.h break EDEN_BUG dependency on folly/Conv 2022-12-08 17:11:17 -08:00
CaseSensitivity.h fs: fix license header 2022-01-04 15:00:07 -08:00
ChronoParse.cpp remove a use of toAppend in ChronoParse.h 2023-07-11 18:41:45 -07:00
ChronoParse.h remove a use of toAppend in ChronoParse.h 2023-07-11 18:41:45 -07:00
ChronoUnit.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
ChronoUnit.gperf fs: fix license header 2022-01-04 15:00:07 -08:00
ChronoUnit.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Clock.cpp remove some conditional includes 2022-07-19 12:37:57 -07:00
Clock.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
CMakeLists.txt Add blake3 support to FileHash utils 2023-06-05 23:41:35 -07:00
CoverageSet.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
CoverageSet.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
DirType.cpp fs: fix license header 2022-01-04 15:00:07 -08:00
DirType.h symlinks: make symlinks appear on Windows on checkout 2023-07-14 08:42:03 -07:00
EdenError.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
EdenError.h migrate EdenError to fmt 2022-10-04 21:42:44 -07:00
EdenTaskQueue.cpp fs: fix license header 2022-01-04 15:00:07 -08:00
EdenTaskQueue.h fs: fix license header 2022-01-04 15:00:07 -08:00
EnumValue.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
EventBaseState.h move EventBaseState into fs/utils 2023-04-24 19:11:42 -07:00
FaultInjector.cpp switch FaultInjector to ImmediateFuture 2022-12-19 13:11:02 -08:00
FaultInjector.h BUILD_MODE.bzl: set NOMINMAX 2023-04-27 14:18:55 -07:00
FileDescriptor.cpp port Path and PathPiece from folly::StringPiece to std::string_view 2022-11-16 18:09:51 -08:00
FileDescriptor.h utils: AbsolutePath are always UNC on Windows 2022-11-08 08:49:16 -08:00
FileHash.cpp symlinks: handle symlinks with absolute paths 2023-08-01 13:59:20 -07:00
FileHash.h Add blake3 support to FileHash utils 2023-06-05 23:41:35 -07:00
FileUtils.cpp replace off_t file offsets with a new FileOffset type compatible with Windows 2023-07-14 16:23:19 -07:00
FileUtils.h replace off_t file offsets with a new FileOffset type compatible with Windows 2023-07-14 16:23:19 -07:00
FsChannelTypes.h introduce an FS-independent FsStopData for takeover 2023-04-19 11:00:53 -07:00
Future.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
FutureUnixSocket.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
FutureUnixSocket.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Guid.cpp shave 5-7 seconds off C++ unit test compile times 2022-07-28 13:32:42 -07:00
Guid.h fix the custom PathFuncs and ObjectId formatters 2022-10-04 21:42:44 -07:00
IDGen.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
IDGen.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
ImmediateFuture-inl.h utils: In place ImmediateFuture should consider kImmediateFutureAlwaysDefer 2023-03-02 16:55:02 -08:00
ImmediateFuture-pre.h ImmediateFuture: allow implicit conversion from Future 2022-12-19 13:11:02 -08:00
ImmediateFuture.cpp immediatefuture: redo makeNotReadyImmediateFuture 2022-10-13 21:44:10 -07:00
ImmediateFuture.h ImmediateFuture: allow implicit conversion from Future 2022-12-19 13:11:02 -08:00
IoFuture.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
IoFuture.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
LazyInitialize.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
LeaseCache.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
MappedDiskVector.h remove some conditional includes 2022-07-19 12:37:57 -07:00
Match.h introduce a useful pattern-match function over std::visit 2023-05-11 11:10:01 -07:00
Memory.cpp fs: fix license header 2022-01-04 15:00:07 -08:00
Memory.h break Memory.h dependency on FBString.h 2023-05-10 16:26:12 -07:00
NfsSocket.cpp port Path and PathPiece from folly::StringPiece to std::string_view 2022-11-16 18:09:51 -08:00
NfsSocket.h fs: fix license header 2022-01-04 15:00:07 -08:00
NotImplemented.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
PathFuncs.cpp break dependency from SharedMutex on SysResource.h 2023-07-24 15:59:32 -07:00
PathFuncs.h return the config file path from getConfig 2022-12-10 05:09:52 -08:00
PathMap.h format path types with fmt instead of folly/Conv 2022-11-15 15:40:33 -08:00
Pipe.cpp Windows: fix warnings in daemon code 2023-03-29 11:13:25 -07:00
Pipe.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
ProcessAccessLog.cpp clang-tidy advice 2023-07-13 16:30:55 -07:00
ProcessAccessLog.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
ProcUtil.cpp Add process name exclsuion and log reporting for NFS crawling detection 2023-07-07 19:48:02 -07:00
ProcUtil.h Add process name exclsuion and log reporting for NFS crawling detection 2023-07-07 19:48:02 -07:00
ProjfsUtil.cpp add and test renamed placeholder detection 2023-02-06 16:55:36 -08:00
ProjfsUtil.h add and test renamed placeholder detection 2023-02-06 16:55:36 -08:00
RefPtr.h remove the reference-counting overhead from DurationScope 2023-03-24 13:50:40 -07:00
RingBuffer.h add a RingBuffer 2023-04-03 23:40:55 -07:00
SortedInsert.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
SourceLocation.h introduce a SourceLocation type 2022-11-03 14:18:34 -07:00
SpawnedProcess.cpp clang-tidy advice 2023-07-13 16:30:55 -07:00
SpawnedProcess.h remove all but one inclusion of folly/String.h in headers 2023-05-11 11:10:01 -07:00
StaticAssert.h fs: fix license header 2022-01-04 15:00:07 -08:00
StatTimes.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
String.cpp Hostname normalization C++ implementation and test cases 2023-06-12 16:59:17 -07:00
String.h Hostname normalization C++ implementation and test cases 2023-06-12 16:59:17 -07:00
SysctlUtil.cpp inodes: fix checkout with concurrent recursive grep 2022-10-18 12:32:52 -07:00
SysctlUtil.h log architecture on macOS to edenfs_events 2022-08-31 11:57:28 -07:00
SystemError.h inodes: fix checkout with concurrent recursive grep 2022-10-18 12:32:52 -07:00
Thread.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Thread.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Throw.h allow passing fmt views to throw_ and throwf 2022-12-09 13:10:45 -08:00
TimeUtil.cpp remove folly::Format TimeUtil 2022-08-02 11:44:19 -07:00
TimeUtil.h Add path information to inode tracing commands 2022-07-19 16:30:46 -07:00
Try.h EDEN_TRY macro 2023-06-14 12:16:45 -07:00
UnboundedQueueExecutor.cpp standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
UnboundedQueueExecutor.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
UnixSocket.cpp migrate constructions of folly::exception_wrapper 2022-10-12 12:01:08 -07:00
UnixSocket.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
UserInfo.cpp utils: deny building an AbsolutePath from a literal 2022-11-22 16:20:30 -08:00
UserInfo.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
Utf8.cpp use appendCodePointToUtf8 2022-08-01 07:09:24 -07:00
Utf8.h standardize namespaces on C++17 syntax 2022-05-17 10:12:56 -07:00
WinStackTrace.cpp utils: deny building an AbsolutePath from a literal 2022-11-22 16:20:30 -08:00
WinStackTrace.h windows: teach eden to look for pdb in the binary path 2022-05-03 13:39:24 -07:00
XAttr.cpp break XAttr's dependency on folly/Range 2023-07-13 11:52:33 -07:00
XAttr.h break XAttr's dependency on folly/Range 2023-07-13 11:52:33 -07:00