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:
Profpatsch 2021-01-30 06:58:54 +01:00
parent f4a4da134b
commit 5f9e9a60e8

View file

@ -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) ];
}