Add a warning to filterSource

Warn about the usage of `filterSource` with Nix store paths
This commit is contained in:
ilkecan 2021-09-22 21:58:21 +03:00
parent bcd73ebf60
commit a4a6ef4fb2

View file

@ -413,7 +413,7 @@ static RegisterPrimOp primop_isNull({
Return `true` if *e* evaluates to `null`, and `false` otherwise. Return `true` if *e* evaluates to `null`, and `false` otherwise.
> **Warning** > **Warning**
> >
> This function is *deprecated*; just write `e == null` instead. > This function is *deprecated*; just write `e == null` instead.
)", )",
.fun = prim_isNull, .fun = prim_isNull,
@ -1919,6 +1919,19 @@ static RegisterPrimOp primop_filterSource({
.name = "__filterSource", .name = "__filterSource",
.args = {"e1", "e2"}, .args = {"e1", "e2"},
.doc = R"( .doc = R"(
> **Warning**
>
> `filterSource` should not be used to filter store paths. Since
> `filterSource` uses the name of the input directory while naming
> the output directory, doing so will produce a directory name in
> the form of `<hash2>-<hash>-<name>`, where `<hash>-<name>` is
> the name of the input directory. Since `<hash>` depends on the
> unfiltered directory, the name of the output directory will
> indirectly depend on files that are filtered out by the
> function. This will trigger a rebuild even when a filtered out
> file is changed. Use `builtins.path` instead, which allows
> specifying the name of the output directory.
This function allows you to copy sources into the Nix store while This function allows you to copy sources into the Nix store while
filtering certain files. For instance, suppose that you want to use filtering certain files. For instance, suppose that you want to use
the directory `source-dir` as an input to a Nix expression, e.g. the directory `source-dir` as an input to a Nix expression, e.g.
@ -2519,7 +2532,7 @@ static RegisterPrimOp primop_tail({
the argument isnt a list or is an empty list. the argument isnt a list or is an empty list.
> **Warning** > **Warning**
> >
> This function should generally be avoided since it's inefficient: > This function should generally be avoided since it's inefficient:
> unlike Haskell's `tail`, it takes O(n) time, so recursing over a > unlike Haskell's `tail`, it takes O(n) time, so recursing over a
> list by repeatedly calling `tail` takes O(n^2) time. > list by repeatedly calling `tail` takes O(n^2) time.