feat(readTree): Add support for skipping directory subtrees
Placing a special `.skip-subtree` file in any directory will now prevent readTree from further traversing that part of the tree. This makes it possible to have packages with internal Nix files that are incompatible with the larger depot structure, for example for projects like buildGo.nix which need to be compatible with the external nixpkgs model.
This commit is contained in:
parent
e996141d2e
commit
467a66bac2
1 changed files with 9 additions and 2 deletions
|
@ -5,6 +5,7 @@ let
|
|||
attrNames
|
||||
baseNameOf
|
||||
filter
|
||||
hasAttr
|
||||
head
|
||||
length
|
||||
listToAttrs
|
||||
|
@ -35,9 +36,15 @@ let
|
|||
self = importWithMark path parts;
|
||||
joinChild = c: path + ("/" + c);
|
||||
|
||||
# Import non-empty subdirectories
|
||||
# Import subdirectories of the current one, unless the special
|
||||
# `.skip-subtree` file exists which makes readTree ignore the
|
||||
# children.
|
||||
#
|
||||
# This file can optionally contain information on why the tree
|
||||
# should be ignored, but its content is not inspected by
|
||||
# readTree
|
||||
filterDir = f: dir."${f}" == "directory";
|
||||
children = map (c: {
|
||||
children = if hasAttr ".skip-subtree" dir then [] else map (c: {
|
||||
name = c;
|
||||
value = readTree (joinChild c) (parts ++ [ c ]);
|
||||
}) (filter filterDir (attrNames dir));
|
||||
|
|
Loading…
Reference in a new issue