diff options
author | Qyriad <qyriad@qyriad.me> | 2024-05-09 11:46:13 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@lix-systems> | 2024-05-09 11:46:13 +0000 |
commit | 010bbd1b0e5d57013774ef655cbe886d7a6b434e (patch) | |
tree | 5002fe33d748f85787bc4b6b0878f522d9a05429 | |
parent | da0e1f5716be8e983faf4d507af08283e273f2b7 (diff) | |
parent | 54322f09d353e296b06ce8b1f4264749a7ccd489 (diff) |
Merge "nix3-eval: don't elide top-level errors" into main
-rw-r--r-- | src/nix/eval.cc | 4 | ||||
-rw-r--r-- | tests/functional/eval.sh | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/nix/eval.cc b/src/nix/eval.cc index a9e4c8968..469ff7391 100644 --- a/src/nix/eval.cc +++ b/src/nix/eval.cc @@ -1,5 +1,6 @@ #include "command-installable-value.hh" #include "common-args.hh" +#include "print-options.hh" #include "shared.hh" #include "store-api.hh" #include "eval.hh" @@ -127,7 +128,8 @@ struct CmdEval : MixJSON, InstallableValueCommand, MixReadOnlyOption *v, PrintOptions { .force = true, - .derivationPaths = true + .derivationPaths = true, + .errors = ErrorPrintBehavior::ThrowTopLevel, } ) ); diff --git a/tests/functional/eval.sh b/tests/functional/eval.sh index 0e789cc47..2b34caddb 100644 --- a/tests/functional/eval.sh +++ b/tests/functional/eval.sh @@ -22,6 +22,15 @@ nix eval -E 'assert 1 + 2 == 3; true' [[ $(nix eval int -f - < "./eval.nix") == 123 ]] [[ "$(nix eval --expr '{"assert"=1;bar=2;}')" == '{ "assert" = 1; bar = 2; }' ]] +# Top-level eval errors should be printed to stderr with a traceback. +topLevelThrow="$(expectStderr 1 nix eval --expr 'throw "a sample throw message"')" +[[ "$topLevelThrow" =~ "a sample throw message" ]] +[[ "$topLevelThrow" =~ "while calling the 'throw' builtin" ]] + +# But errors inside something should print an elided version, and exit with 0. +outputOfNestedThrow="$(nix eval --expr '{ throws = throw "a sample throw message"; }')" +[[ "${outputOfNestedThrow}" == "{ throws = «error: a sample throw message»; }" ]] + # Check if toFile can be utilized during restricted eval [[ $(nix eval --restrict-eval --expr 'import (builtins.toFile "source" "42")') == 42 ]] |