diff options
-rw-r--r-- | tvix/cli/src/derivation.rs | 6 | ||||
-rw-r--r-- | tvix/cli/src/errors.rs | 2 | ||||
-rw-r--r-- | tvix/eval/src/vm/generators.rs | 2 | ||||
-rw-r--r-- | tvix/eval/src/warnings.rs | 7 |
4 files changed, 11 insertions, 6 deletions
diff --git a/tvix/cli/src/derivation.rs b/tvix/cli/src/derivation.rs index cf15ebbb0dc3..fa246cc74fe9 100644 --- a/tvix/cli/src/derivation.rs +++ b/tvix/cli/src/derivation.rs @@ -5,8 +5,8 @@ use std::cell::RefCell; use std::collections::{btree_map, BTreeSet}; use std::rc::Rc; use tvix_eval::builtin_macros::builtins; -use tvix_eval::generators::{self, GenCo}; -use tvix_eval::{AddContext, CoercionKind, ErrorKind, NixAttrs, NixList, Value}; +use tvix_eval::generators::{self, emit_warning_kind, GenCo}; +use tvix_eval::{AddContext, CoercionKind, ErrorKind, NixAttrs, NixList, Value, WarningKind}; use crate::errors::Error; use crate::known_paths::{KnownPaths, PathKind, PathName}; @@ -327,7 +327,7 @@ mod derivation_builtins { .insert(output.to_string(), String::new()) .is_some() { - return Err(Error::ShadowedOutput(output.to_string()).into()); + emit_warning_kind(&co, WarningKind::ShadowedOutput(output.to_string())).await; } } diff --git a/tvix/cli/src/errors.rs b/tvix/cli/src/errors.rs index 6f328dc0003c..5cbddcbba811 100644 --- a/tvix/cli/src/errors.rs +++ b/tvix/cli/src/errors.rs @@ -11,8 +11,6 @@ pub enum Error { ConflictingOutputTypes, #[error("the environment variable '{0}' has already been set in this derivation")] DuplicateEnvVar(String), - #[error("the environment variable '{0}' shadows the name of an output")] - ShadowedOutput(String), #[error("invalid derivation parameters: {0}")] InvalidDerivation(DerivationError), #[error("invalid output hash: {0}")] diff --git a/tvix/eval/src/vm/generators.rs b/tvix/eval/src/vm/generators.rs index f86683dff542..138600be194a 100644 --- a/tvix/eval/src/vm/generators.rs +++ b/tvix/eval/src/vm/generators.rs @@ -650,7 +650,7 @@ pub(crate) async fn emit_warning(co: &GenCo, warning: EvalWarning) { } /// Emit a runtime warning with the span of the current generator. -pub(crate) async fn emit_warning_kind(co: &GenCo, kind: WarningKind) { +pub async fn emit_warning_kind(co: &GenCo, kind: WarningKind) { match co.yield_(VMRequest::EmitWarningKind(kind)).await { VMResponse::Empty => {} msg => panic!( diff --git a/tvix/eval/src/warnings.rs b/tvix/eval/src/warnings.rs index aa567f302755..e007d9c34f2d 100644 --- a/tvix/eval/src/warnings.rs +++ b/tvix/eval/src/warnings.rs @@ -17,6 +17,7 @@ pub enum WarningKind { DeadCode, EmptyInherit, EmptyLet, + ShadowedOutput(String), /// Tvix internal warning for features triggered by users that are /// not actually implemented yet, but do not cause runtime failures. @@ -100,6 +101,11 @@ impl EvalWarning { WarningKind::EmptyLet => "this `let`-expression contains no bindings".to_string(), + WarningKind::ShadowedOutput(ref out) => format!( + "this derivation's environment shadows the output name {}", + out + ), + WarningKind::NotImplemented(what) => { format!("feature not yet implemented in tvix: {}", what) } @@ -120,6 +126,7 @@ impl EvalWarning { WarningKind::DeadCode => "W008", WarningKind::EmptyInherit => "W009", WarningKind::EmptyLet => "W010", + WarningKind::ShadowedOutput(_) => "W011", WarningKind::NotImplemented(_) => "W999", } |