diff options
author | sterni <sternenseemann@systemli.org> | 2021-09-11T16·47+0200 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2021-10-02T18·24+0000 |
commit | 66fa718cebb4808a95c17e7ee692cf8e5dc87653 (patch) | |
tree | 52f5409d179863d484de5bfa9695095562ca4d9a /third_party/overlays/haskell/default.nix | |
parent | 0eef0e343f6ac3b7afbe7f6895fce8b5d20d3b3a (diff) |
feat(nix/utils): expose pathType of symlink target r/2947
In order to make readTree import symlinked directories I've been looking into how to detect if a symlink points to a directory (since this would allow us to use symlinks for //nix/sparseTree). I've found a hack for this: symlinkPointsToDir = path: isSymlink path && builtins.pathExists (toString path + "/.") Unfortunately it doesn't seem to be possible to distinguish whether the symlink target does not exist or is a regular file. Since it's possible, I thought might as well add this to `pathType`. To make returning the extra information workable, I've elected to use the attribute set layout used by `//nix/tag`. This doesn't require us to depend anything (as opposed to yants), but gives us pattern matching (via `nix.tag.match`) and also quite idiomatic checking of pathTypes: pathType ./foo ? file (pathType ./foo).symlink or null == "symlink-directory" Nonexistent paths are encoded like this: pathType ./foo ? missing Of course we can't use this in readTree (since it must be zero dependency), but we can easily inline this hack at some point. Change-Id: I15b64a1ea69953c95dc3239ef5860623652b3089 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3535 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'third_party/overlays/haskell/default.nix')
0 files changed, 0 insertions, 0 deletions