From 8b851956ad3adab52c0740d6d9353d3900613fe3 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 26 Aug 2021 19:41:50 +0300 Subject: 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 Reviewed-by: sterni --- nix/readTree/default.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'nix') diff --git a/nix/readTree/default.nix b/nix/readTree/default.nix index 4d5385921e..633915f78b 100644 --- a/nix/readTree/default.nix +++ b/nix/readTree/default.nix @@ -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; -- cgit 1.4.1