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
|
let
|
||||||
inherit (builtins)
|
inherit (builtins)
|
||||||
attrNames
|
attrNames
|
||||||
|
@ -18,7 +16,7 @@ let
|
||||||
readDir
|
readDir
|
||||||
substring;
|
substring;
|
||||||
|
|
||||||
argsWithPath = parts:
|
argsWithPath = args: parts:
|
||||||
let meta.locatedAt = parts;
|
let meta.locatedAt = parts;
|
||||||
in meta // (if isAttrs args then args else args meta);
|
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
|
# The marker is added to every set that was imported directly by
|
||||||
# readTree.
|
# readTree.
|
||||||
importWithMark = path: parts:
|
importWithMark = args: path: parts:
|
||||||
let imported = import path (argsWithPath parts);
|
let imported = import path (argsWithPath args parts);
|
||||||
in if (isAttrs imported)
|
in if (isAttrs imported)
|
||||||
then imported // (marker parts)
|
then imported // (marker parts)
|
||||||
else imported;
|
else imported;
|
||||||
|
@ -49,11 +47,11 @@ let
|
||||||
let res = match "(.*)\.nix" file;
|
let res = match "(.*)\.nix" file;
|
||||||
in if res == null then null else head res;
|
in if res == null then null else head res;
|
||||||
|
|
||||||
readTree = path: parts:
|
readTree = args: initPath: parts:
|
||||||
let
|
let
|
||||||
dir = readDirVisible path;
|
dir = readDirVisible initPath;
|
||||||
self = importWithMark path parts;
|
self = importWithMark args initPath parts;
|
||||||
joinChild = c: path + ("/" + c);
|
joinChild = c: initPath + ("/" + c);
|
||||||
|
|
||||||
# Import subdirectories of the current one, unless the special
|
# Import subdirectories of the current one, unless the special
|
||||||
# `.skip-subtree` file exists which makes readTree ignore the
|
# `.skip-subtree` file exists which makes readTree ignore the
|
||||||
|
@ -65,16 +63,19 @@ let
|
||||||
filterDir = f: dir."${f}" == "directory";
|
filterDir = f: dir."${f}" == "directory";
|
||||||
children = if hasAttr ".skip-subtree" dir then [] else map (c: {
|
children = if hasAttr ".skip-subtree" dir then [] else map (c: {
|
||||||
name = c;
|
name = c;
|
||||||
value = readTree (joinChild c) (parts ++ [ c ]);
|
value = readTree args (joinChild c) (parts ++ [ c ]);
|
||||||
}) (filter filterDir (attrNames dir));
|
}) (filter filterDir (attrNames dir));
|
||||||
|
|
||||||
# Import Nix files
|
# Import Nix files
|
||||||
nixFiles = filter (f: f != null) (map nixFileName (attrNames dir));
|
nixFiles = filter (f: f != null) (map nixFileName (attrNames dir));
|
||||||
nixChildren = map (c: let p = joinChild (c + ".nix"); in {
|
nixChildren = map (c: let p = joinChild (c + ".nix"); in {
|
||||||
name = c;
|
name = c;
|
||||||
value = importWithMark p (parts ++ [ c ]);
|
value = importWithMark args p (parts ++ [ c ]);
|
||||||
}) nixFiles;
|
}) nixFiles;
|
||||||
in if dir ? "default.nix"
|
in if dir ? "default.nix"
|
||||||
then (if isAttrs self then self // (listToAttrs children) else self)
|
then (if isAttrs self then self // (listToAttrs children) else self)
|
||||||
else (listToAttrs (nixChildren ++ children) // (marker parts));
|
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