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
18 lines
464 B
Nix
18 lines
464 B
Nix
{ filterin }:
|
|
|
|
with import ./config.nix;
|
|
|
|
mkDerivation {
|
|
name = "filter";
|
|
builder = builtins.toFile "builder" "ln -s $input $out";
|
|
input =
|
|
builtins.path {
|
|
path = filterin;
|
|
filter = path: type:
|
|
type != "symlink"
|
|
&& (builtins.substring 0 (builtins.stringLength filterin) (builtins.toString path) == filterin)
|
|
&& baseNameOf path != "foo"
|
|
&& !((import ./lang/lib.nix).hasSuffix ".bak" (baseNameOf path));
|
|
};
|
|
}
|