From 75f637c1f5920cd6290ac078fa9ec51372173a68 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Mon, 10 Oct 2022 14:19:42 -0400 Subject: fix(tvix/eval): path resolution errors are catchable Despite this not being documented, `tryEval` is empirically able to catch errors caused by a <...> path not resolving (and nixpkgs depends on this). Change-Id: Ia3b78a2d9d2d0c603aba829518b351102dc55396 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6926 Reviewed-by: sterni Autosubmit: grfn Tested-by: BuildkiteCI --- tvix/eval/src/errors.rs | 2 +- tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.exp | 2 +- tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.nix | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tvix/eval/src/errors.rs b/tvix/eval/src/errors.rs index 3ba3404a8d12..3986640beb5f 100644 --- a/tvix/eval/src/errors.rs +++ b/tvix/eval/src/errors.rs @@ -162,7 +162,7 @@ impl ErrorKind { /// Returns `true` if this error can be caught by `builtins.tryEval` pub fn is_catchable(&self) -> bool { match self { - Self::Throw(_) | Self::AssertionFailed => true, + Self::Throw(_) | Self::AssertionFailed | Self::PathResolution(_) => true, Self::ThunkForce(err) => err.kind.is_catchable(), _ => false, } diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.exp b/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.exp index 2b2e6fa711f4..770a5b6db405 100644 --- a/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.exp +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.exp @@ -1 +1 @@ -{ x = { success = true; value = "x"; }; y = { success = false; value = false; }; z = { success = false; value = false; }; } +{ w = { success = false; value = false; }; x = { success = true; value = "x"; }; y = { success = false; value = false; }; z = { success = false; value = false; }; } diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.nix b/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.nix index 629bc440a85a..8915032abd6f 100644 --- a/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.nix +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-tryeval.nix @@ -1,4 +1,5 @@ { + w = builtins.tryEval ; x = builtins.tryEval "x"; y = builtins.tryEval (assert false; "y"); z = builtins.tryEval (throw "bla"); -- cgit 1.4.1