Under chroot or diverted store setups, the filtering logic of `builtins.filterSource` and `builtins.path` (which shares the same filtering logic as `filterSource`) would incorrectly pass physical paths to the filter function instead of logical store paths. This caused actual breakage in nixpkgs when the `lib.fileset` library was introduced. Due to this unresolved bug in Nix, the library was forbidden from use: <https://github.com/NixOS/nixpkgs/pull/369694>. To the best of our knowledge, this bug has existed since CppNix 2.3. The existing tests were strengthened to cover these cases, but additional testing may be required, particularly regarding symlink handling. References: https://github.com/NixOS/nix/pull/12512 (CppNix fix to the problem using "union" abstractions). Co-authored-by: Raito Bezarius <raito@lix.systems> Co-authored-by: Alois Wohlschlager <alois1@gmx-topmail.de> Co-authored-by: eldritch horrors <pennae@lix.systems> Signed-off-by: Raito Bezarius <raito@lix.systems> Change-Id: Iaf6ca8c506eeca145393ce100c64db12178daa62
36 lines
1.2 KiB
Bash
36 lines
1.2 KiB
Bash
source common.sh
|
|
|
|
rm -rf $TEST_ROOT/filterin
|
|
mkdir $TEST_ROOT/filterin
|
|
mkdir $TEST_ROOT/filterin/foo
|
|
touch $TEST_ROOT/filterin/foo/bar
|
|
touch $TEST_ROOT/filterin/xyzzy
|
|
touch $TEST_ROOT/filterin/b
|
|
touch $TEST_ROOT/filterin/bak
|
|
touch $TEST_ROOT/filterin/bla.c.bak
|
|
ln -s xyzzy $TEST_ROOT/filterin/link
|
|
|
|
checkFilter() {
|
|
test ! -e $1/foo/bar
|
|
test -e $1/xyzzy
|
|
test -e $1/bak
|
|
test ! -e $1/bla.c.bak
|
|
test ! -L $1/link
|
|
}
|
|
|
|
nix-build ./filter-source.nix --argstr filterin $TEST_ROOT/filterin -o $TEST_ROOT/filterout1
|
|
checkFilter $TEST_ROOT/filterout1
|
|
|
|
nix-build ./path.nix --argstr filterin $TEST_ROOT/filterin -o $TEST_ROOT/filterout2
|
|
checkFilter $TEST_ROOT/filterout2
|
|
|
|
if canUseSandbox; then
|
|
filterinStorePath=$(nix-store --add-fixed --recursive sha256 $TEST_ROOT/filterin --store $TEST_HOME/.local/share/nix/root)
|
|
|
|
nix-build ./filter-source.nix --argstr filterin $filterinStorePath -o $TEST_ROOT/filterout3 --store $TEST_HOME/.local/share/nix/root --builders 'auto - - 1 1'
|
|
checkFilter $TEST_ROOT/filterout3
|
|
|
|
nix-build ./path.nix --argstr filterin $filterinStorePath -o $TEST_ROOT/filterout4 --store $TEST_HOME/.local/share/nix/root --builders 'auto - - 1 1'
|
|
checkFilter $TEST_ROOT/filterout4
|
|
fi
|