@philiptaron's lix workspace
Find a file
Felix Uhl 3fefc2b284 Fix derivation load assertion errors
When loading a derivation from a JSON, malformed input would trigger
cryptic "assertion failed" errors. Simply replacing calls to `operator []`
with calls to `.at()` was not enough, as this would cause json.execptions
to be printed verbatim.

Display nice error messages instead and give some indication where the
error happened.

*Before:*

```
$ echo 4 | nix derivation add
error: [json.exception.type_error.305] cannot use operator[] with a string argument with number

$ nix derivation show nixpkgs#hello | nix derivation add
Assertion failed: (it != m_value.object->end()), function operator[], file /nix/store/8h9pxgq1776ns6qi5arx08ifgnhmgl22-nlohmann_json-3.11.2/include/nlohmann/json.hpp, line 2135.

$ nix derivation show nixpkgs#hello | jq '.[] | .name = 5' | nix derivation add
error: [json.exception.type_error.302] type must be string, but is object

$ nix derivation show nixpkgs#hello | jq '.[] | .outputs = { out: "/nix/store/8j3f8j-hello" }' | nix derivation add
error: [json.exception.type_error.302] type must be object, but is string

```

*After:*

```
$ echo 4 | nix derivation add
error: Expected JSON of derivation to be of type 'object', but it is of type 'number'

$ nix derivation show nixpkgs#hello | nix derivation add
error: Expected JSON object to contain key 'name' but it doesn't

$ nix derivation show nixpkgs#hello | jq '.[] | .name = 5' | nix derivation add
error: Expected JSON value to be of type 'string' but it is of type 'number'

$ nix derivation show nixpkgs#hello | jq '.[] | .outputs = { out: "/nix/store/8j3f8j-hello" }' | nix derivation add
error:
       … while reading key 'outputs'

       error: Expected JSON value to be of type 'object' but it is of type 'string'
```
2023-08-05 01:34:30 +02:00
.github labeler.yml: tests -> with-tests 2023-06-30 15:10:07 +02:00
config
contrib
doc Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
m4
maintainers maintainers: add note on marking PRs as draft 2023-06-19 10:55:34 +02:00
misc Choose a reasonable number similar to LimitNOFile 2023-07-07 07:52:16 -07:00
mk Introduce notion of a test group, use for CA tests 2023-07-18 09:31:13 -04:00
perl Simplify ContentAddress 2023-07-07 07:30:01 -04:00
scripts Merge pull request #8512 from scarf005/install-show-uid 2023-06-15 13:49:44 +02:00
src Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
tests toJSON: Add attribute path to trace 2023-07-31 13:02:54 +02:00
.dir-locals.el
.editorconfig
.gitignore Expanded test suite 2023-07-11 21:43:09 -04:00
.version Bump version 2023-07-24 21:30:33 +02:00
boehmgc-coroutine-sp-fallback.diff
bootstrap.sh
configure.ac expand on the system type in hacking guide 2023-07-19 10:37:40 +02:00
CONTRIBUTING.md CONTRIBUTING.md: add link to "good first issues" 2023-06-19 10:39:19 +02:00
COPYING
default.nix
docker.nix
flake.lock
flake.nix
local.mk
Makefile Introduce notion of a test group, use for CA tests 2023-07-18 09:31:13 -04:00
Makefile.config.in
precompiled-headers.h
README.md
shell.nix

Nix

Open Collective supporters Test

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation

On Linux and macOS the easiest way to install Nix is to run the following shell command (as a user other than root):

$ curl -L https://nixos.org/nix/install | sh

Information on additional installation methods is available on the Nix download page.

Building And Developing

See our Hacking guide in our manual for instruction on how to to set up a development environment and build Nix from source.

Additional Resources

License

Nix is released under the LGPL v2.1.