Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix derivation load assertion errors #8760

Merged

Commits on Aug 4, 2023

  1. 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'
    ```
    iFreilicht committed Aug 4, 2023
    Configuration menu
    Copy the full SHA
    3fefc2b View commit details
    Browse the repository at this point in the history