Age | Commit message (Collapse) | Author |
|
Given flake:
```nix
{ description = "nix json error provenance";
inputs = {};
outputs = { self }: {
jsonFunction = _: "function";
json = builtins.toJSON (_: "function");
};
}
```
- Before:
```console
❯ nix eval --json .#jsonFunction
error: cannot convert a function to JSON
```
- After:
```console
❯ nix eval --json .#jsonFunction
error: cannot convert a function to JSON
at /nix/store/b7imf1c2j4jnkg3ys7fsfbj02s5j0i4f-source/testflake/flake.nix:4:5:
3| outputs = { self }: {
4| jsonFunction = _: "function";
| ^
5| json = builtins.toJSON (_: "function");
```
|
|
- This change applies to builtins.fetchurl and builtins.fetchTarball
- PoC: `let x = builtins.fetchurl x; in x`
- Before:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
```
- After:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
at /data/github/kamadorueda/nix/test.nix:1:9:
1| let x = builtins.fetchurl x; in x
| ^
```
Mentions: #3505
|
|
- This way we improve error messages
on infinite recursion
- Demo:
```nix
let x = builtins.fetchTree {
type = "git";
inherit x;
};
in x
```
- Before:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
```
- After:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
at /data/github/kamadorueda/nix/test.nix:3:10:
2| type = "git";
3| inherit x;
| ^
4| };
```
Mentions: #3505
|
|
- This way we improve error messages
on infinite recursion
- Demo:
```nix
let x = builtins.fetchTree x;
in x
```
- Before:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
```
- After:
```bash
$ nix-instantiate --extra-experimental-features flakes --strict
error: infinite recursion encountered
at /data/github/kamadorueda/nix/test.nix:1:9:
1| let x = builtins.fetchTree x;
| ^
2| in x
```
Mentions: #3505
|
|
- This way we improve error messages
on infinite recursion
- Demo:
```nix
let
x = builtins.fetchMercurial x;
in
x
```
- Before:
```bash
$ nix-instantiate --show-trace --strict
error: infinite recursion encountered
```
- After:
```bash
nix-instantiate --show-trace --strict
error: infinite recursion encountered
at /data/github/kamadorueda/test/default.nix:2:7:
1| let
2| x = builtins.fetchMercurial x;
| ^
3| in
```
Mentions: #3505
|
|
This reverts some parts of commit
8430a8f0866e4463a891ccce62779ea9ac0f3b38 which was trying to rethrow
some exceptions while we weren’t in the context of a `catch` block,
causing some weird “terminate called without an active exception”
errors.
Fix #5368
|
|
|
|
|
|
We now build the context (so this has the side-effect of making
builtins.{path,filterSource} work on derivations outputs, if IFD is
enabled) and then check that the path has no references (which is what
we really care about).
|
|
Worker::run() already does this.
|
|
Fixes https://github.com/NixOS/nix/pull/5163#issuecomment-931733912.
|
|
|
|
libexpr: remove matchAttrs boolean from ExprLambda
|
|
Warn about the usage of filterSource with Nix store paths
|
|
Warn about the usage of `filterSource` with Nix store paths
|
|
|
|
|
|
The 'url' attribute depends on whether type == 'git', so this is needed for
builtins.fetchTree {url = "git@github.com:NixOS/nix.git"; type = "git";}
|
|
|
|
The boolean is only used to determine if the formals are set to a
non-null pointer in all our cases. We can get rid of that allocation and
instead just compare the pointer value with NULL. Saving up to
sizeof(bool) + platform specific alignment per ExprLambda instace.
Probably not a lot of memory but perhaps a few kilobyte with nixpkgs?
This also gets rid of a potential issue with dereferencing formals based on
the value of the boolean that didn't have to be aligned with the formals
pointer but was in all our cases.
|
|
|
|
I had started the trend of doing `std::visit` by value (because a type
error once mislead me into thinking that was the only form that
existed). While the optomizer in principle should be able to deal with
extra coppying or extra indirection once the lambdas inlined, sticking
with by reference is the conventional default. I hope this might even
improve performance.
|
|
|
|
libexpr: throw a more helpful eval-error if a builtin is not available due to a missing feature-flag
|
|
to a missing feature-flag
I found it somewhat confusing to have an error like
error: attribute 'getFlake' missing
if the required experimental-feature (`flakes`) is not enabled. Instead,
I'd expect Nix to throw an error just like it's the case when using e.g. `nix
flake` without `flakes` being enabled.
With this change, the error looks like this:
$ nix-instantiate -E 'builtins.getFlake "nixpkgs"'
error: Cannot call 'builtins.getFlake' because experimental Nix feature 'flakes' is disabled. You can enable it via '--extra-experimental-features flakes'.
at «string»:1:1:
1| builtins.getFlake "nixpkgs"
| ^
I didn't use `settings.requireExperimentalFeature` here on purpose
because this doesn't contain a position. Also, it doesn't seem as if we
need to catch the error and check for the missing feature here since
this already happens at evaluation time.
|
|
|
|
Don't allow IFD in flakes by default
|
|
This reverts commit 6678e98411cd3bfe8143a4ba1b35d1451babce32, reversing
changes made to 90b2dd570cbd8313a8cf45b3cf66ddef2bb06e07.
|
|
Errors that depend on the configuration (such as whether
allow-import-from-derivation is set) should not be cached.
|
|
|
|
Without this, flakes within the same tree and same lock data will have
the same fingerprint and the eval cache for one flake will be
incorrectly used for another.
|
|
If we can't write a lock file, pretend the top-level flake is dirty
|
|
|
|
Alternative to #4639. You can still read flake.lock, but at least in
reproducible workflows like NixOS configurations where you require a
non-dirty tree, evaluation will fail because there is no rev.
|
|
This reverts commit e5596113f7fc5e47e058bb15afdf75eee02ed95e.
|
|
With --no-write-lock-file, it's possible that flake.lock is out of
sync with the actual inputs used by the evaluation. So doing fromJSON
(readFile ./flake.lock) will give wrong results.
Fixes #4639.
|
|
nix --help: Display help using lowdown instead of man
|
|
|
|
Fixes #4476.
Fixes #5231.
|
|
Fix use-registries logic in builtins.getFlake
|
|
libfetchers/git: fetch submodules by default
|
|
|
|
add antiquotations to paths
|
|
I don't think this changes the way any program would behave, but it's a
cleaner internal representation.
|
|
|
|
Don't overwrite user provided `lib*_LDFLAGS`
|
|
EvalState lifetime hygiene
|
|
|
|
This fixes a use-after-free bug:
1. s = new EvalState();
2. callFlake()
3. static vCallFlake now references s
4. delete s;
5. s2 = new EvalState();
6. callFlake()
7. static vCallFlake still references s
8. crash
Nix 2.3 did not have a problem with recreating EvalState.
|
|
This fixes a class of crashes and introduces ptr<T> to make the
code robust against this failure mode going forward.
Thanks regnat for the idea of a ref<T> without overhead!
Closes #4895
Closes #4893
Closes #5127
Closes #5113
|