diff options
author | Silvan Mosberger <contact@infinisil.com> | 2023-11-14 07:25:15 +0100 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2023-11-14 07:30:16 +0100 |
commit | 2035f8a3247a0fce215963e16a161d9387f4b070 (patch) | |
tree | 81ec517cfa1047dfa17f69696ed866b223d1fc5c /lib/fileset/tests.sh | |
parent | e1d833173839985fdb5dfa3dc3d93bf7db374737 (diff) |
lib.fileset.fileFilter: Don't run predicate unnecessarily
Before: nix-repl> fileset.trace (fileset.fileFilter (file: builtins.trace file.name false) ./default.nix) trace: README.md trace: benchmark.sh trace: default.nix trace: internal.nix trace: mock-splitRoot.nix trace: tests.sh After: nix-repl> fileset.trace (fileset.fileFilter (file: builtins.trace file.name false) ./default.nix) trace: default.nix
Diffstat (limited to 'lib/fileset/tests.sh')
-rwxr-xr-x | lib/fileset/tests.sh | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/fileset/tests.sh b/lib/fileset/tests.sh index 4247c71efcfe5..4ddfe3a82a4e1 100755 --- a/lib/fileset/tests.sh +++ b/lib/fileset/tests.sh @@ -857,6 +857,26 @@ checkFileset 'union ./c/a (fileFilter (file: assert file.name != "a"; true) ./.) # but here we need to use ./c checkFileset 'union (fileFilter (file: assert file.name != "a"; true) ./.) ./c' +# Also lazy, the filter isn't called on a filtered out path +tree=( + [a]=1 + [b]=0 + [c]=0 +) +checkFileset 'fileFilter (file: assert file.name != "c"; file.name == "a") (difference ./. ./c)' + +# Make sure single files are filtered correctly +tree=( + [a]=1 + [b]=0 +) +checkFileset 'fileFilter (file: assert file.name == "a"; true) ./a' +tree=( + [a]=0 + [b]=0 +) +checkFileset 'fileFilter (file: assert file.name == "a"; false) ./a' + ## Tracing # The second trace argument is returned |