Commit graph

3 commits

Author SHA1 Message Date
sterni
66fa718ceb feat(nix/utils): expose pathType of symlink target
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>
2021-10-02 18:24:49 +00:00
sterni
bef796d1d9 test(nix/utils): unit test storePathName
Change-Id: I4208cf9e3c5e1d922ee5b5bffd034e4ac6d0e2c0
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3543
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
2021-09-17 11:00:09 +00:00
sterni
4ebab80b5a test(nix/utils): unit test path predicates
Change-Id: I85f38ef8f284c4accd1ea744f61358622785358d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3534
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
2021-09-14 14:17:44 +00:00