feat(nix/sparseTree): allow specifying subtrees as relative paths

Passed strings will be treated as a relative path below the given root,
which is quite convenient when using depot.path by eliminating a lot of
repetition.

Change-Id: I3da6058094484f4a6ffbb84f89ad4472b502a00c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3704
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
sterni 2021-10-09 16:48:14 +02:00
parent 04f7cc3880
commit 2397fd8d56
2 changed files with 20 additions and 12 deletions

View file

@ -14,6 +14,9 @@
root:
# list of paths below `root` that should be
# included in the resulting directory
#
# If path, need to refer to the actual file / directory to be included.
# If a string, it is treated as a string relative to the root.
paths:
let
@ -40,8 +43,13 @@ let
# a leading slash. Additionally some sanity checking is done.
makeSymlink = path:
let
strPath = toString path;
contextPath = "${path}";
withLeading = p: if builtins.substring 0 1 p == "/" then p else "/" + p;
fullPath =
/**/ if builtins.isPath path then path
else if builtins.isString path then (root + withLeading path)
else builtins.throw "Unsupported path type ${builtins.typeOf path}";
strPath = toString fullPath;
contextPath = "${fullPath}";
belowRoot = builtins.substring rootLength (-1) strPath;
prefix = builtins.substring 0 rootLength strPath;
in assert toString root == prefix; {