feat(readTree): Add support for path-dependent args filtering
Adds another argument to readTree itself which can be passed when importing readTree (e.g. in our default.nix) to filter the arguments passed to a target based on that target's location in the tree. This is intentionally not yet mentioned in the docs, and also intentionally implemented in such a way that the API surface of readTree doesn't change. The reason for this is that I want to figure out whether these filter functions are actually useful, e.g. within depot by filtering user-folder passing, and then refactor the readTree API to find a public way of exposing this as part of the readTree function itself (and not its import). Relates to b/143. Change-Id: I2cdf09f67916527d2337f4bfb578749aeac51a6a Reviewed-on: https://cl.tvl.fyi/c/depot/+/3433 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
d857d5ad68
commit
8b851956ad
1 changed files with 7 additions and 2 deletions
|
@ -4,7 +4,12 @@
|
|||
#
|
||||
# Provides a function to automatically read a a filesystem structure
|
||||
# into a Nix attribute set.
|
||||
{ ... }:
|
||||
#
|
||||
# Optionally accepts an argument `argsFilter` on import, which is a
|
||||
# function that receives the current tree location (as a list of
|
||||
# strings) and the argument set and can arbitrarily modify it.
|
||||
{ argsFilter ? (x: _parts: x)
|
||||
, ... }:
|
||||
|
||||
let
|
||||
inherit (builtins)
|
||||
|
@ -56,7 +61,7 @@ let
|
|||
assert assertMsg
|
||||
(pathType == "lambda")
|
||||
"readTree: trying to import ${toString path}, but it’s a ${pathType}, you need to make it a function like { depot, pkgs, ... }";
|
||||
importedFile (argsWithPath args parts);
|
||||
importedFile (argsFilter (argsWithPath args parts) parts);
|
||||
in if (isAttrs imported)
|
||||
then imported // (marker parts)
|
||||
else imported;
|
||||
|
|
Loading…
Reference in a new issue