chore(nix/readTree): move function into __functor
We are going to export some tests under `nix.readTree.tests`, so in order to do that and still have `nix.readTree` be a function, let’s move it to `__functor`. This requires wiring the `args` and `initPath` arguments through explicitly. Change-Id: Ife7956b85d35e59c22174b42dcb7cca83ed868ea Reviewed-on: https://cl.tvl.fyi/c/depot/+/2464 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
f4a4da134b
commit
5f9e9a60e8
1 changed files with 13 additions and 12 deletions
|
@ -1,7 +1,5 @@
|
|||
{ ... }:
|
||||
|
||||
args: initPath:
|
||||
|
||||
let
|
||||
inherit (builtins)
|
||||
attrNames
|
||||
|
@ -18,7 +16,7 @@ let
|
|||
readDir
|
||||
substring;
|
||||
|
||||
argsWithPath = parts:
|
||||
argsWithPath = args: parts:
|
||||
let meta.locatedAt = parts;
|
||||
in meta // (if isAttrs args then args else args meta);
|
||||
|
||||
|
@ -39,8 +37,8 @@ let
|
|||
|
||||
# The marker is added to every set that was imported directly by
|
||||
# readTree.
|
||||
importWithMark = path: parts:
|
||||
let imported = import path (argsWithPath parts);
|
||||
importWithMark = args: path: parts:
|
||||
let imported = import path (argsWithPath args parts);
|
||||
in if (isAttrs imported)
|
||||
then imported // (marker parts)
|
||||
else imported;
|
||||
|
@ -49,11 +47,11 @@ let
|
|||
let res = match "(.*)\.nix" file;
|
||||
in if res == null then null else head res;
|
||||
|
||||
readTree = path: parts:
|
||||
readTree = args: initPath: parts:
|
||||
let
|
||||
dir = readDirVisible path;
|
||||
self = importWithMark path parts;
|
||||
joinChild = c: path + ("/" + c);
|
||||
dir = readDirVisible initPath;
|
||||
self = importWithMark args initPath parts;
|
||||
joinChild = c: initPath + ("/" + c);
|
||||
|
||||
# Import subdirectories of the current one, unless the special
|
||||
# `.skip-subtree` file exists which makes readTree ignore the
|
||||
|
@ -65,16 +63,19 @@ let
|
|||
filterDir = f: dir."${f}" == "directory";
|
||||
children = if hasAttr ".skip-subtree" dir then [] else map (c: {
|
||||
name = c;
|
||||
value = readTree (joinChild c) (parts ++ [ c ]);
|
||||
value = readTree args (joinChild c) (parts ++ [ c ]);
|
||||
}) (filter filterDir (attrNames dir));
|
||||
|
||||
# Import Nix files
|
||||
nixFiles = filter (f: f != null) (map nixFileName (attrNames dir));
|
||||
nixChildren = map (c: let p = joinChild (c + ".nix"); in {
|
||||
name = c;
|
||||
value = importWithMark p (parts ++ [ c ]);
|
||||
value = importWithMark args p (parts ++ [ c ]);
|
||||
}) nixFiles;
|
||||
in if dir ? "default.nix"
|
||||
then (if isAttrs self then self // (listToAttrs children) else self)
|
||||
else (listToAttrs (nixChildren ++ children) // (marker parts));
|
||||
in readTree initPath [ (baseNameOf initPath) ]
|
||||
|
||||
in {
|
||||
__functor = _: args: initPath: readTree args initPath [ (baseNameOf initPath) ];
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue