difftreelog
feat more error contexts
in: trunk
3 files changed
crates/fleet-base/src/host.rsdiffbeforeafterboth520 let secrets = nix_go!(nixos.secrets);520 let secrets = nix_go!(nixos.secrets);521 let mut out = Vec::new();521 let mut out = Vec::new();522 for name in secrets.list_fields()? {522 for name in secrets.list_fields()? {523 let secret = secrets.get_field(&name)?;523 let secret = secrets.get_field(&name).context("getting secret")?;524 let is_shared: bool = nix_go_json!(secret.shared);524 let is_shared: bool = nix_go_json!(secret.shared);525 if is_shared {525 if is_shared {526 continue;526 continue;crates/nix-eval/src/lib.rsdiffbeforeafterboth--- a/crates/nix-eval/src/lib.rs
+++ b/crates/nix-eval/src/lib.rs
@@ -727,7 +727,9 @@
let function = match kind {
FunctorKind::Function => self.clone(),
FunctorKind::Functor => {
- let f = self.get_field("__functor")?;
+ let f = self
+ .get_field("__functor")
+ .context("getting functor value")?;
assert_eq!(
f.type_of(),
NixType::Function,
@@ -754,9 +756,12 @@
if !self.is_derivation() {
bail!("expected derivation to build")
}
- let output_name = self.get_field("outputName")?.to_string()?;
+ let output_name = self
+ .get_field("outputName")
+ .context("getting output name field")?
+ .to_string()?;
let v = if output_name != output {
- let out = self.get_field(output)?;
+ let out = self.get_field(output).context("getting target output")?;
if !out.is_derivation() {
bail!("unknown output: {output}");
}
crates/nix-eval/src/macros.rsdiffbeforeafterboth--- a/crates/nix-eval/src/macros.rs
+++ b/crates/nix-eval/src/macros.rs
@@ -66,20 +66,21 @@
#[macro_export]
macro_rules! nix_go {
- (@o($o:expr) . $var:ident $($tt:tt)*) => {{
- nix_go!(@o($o.get_field(stringify!($var))?) $($tt)*)
+ (@o($o:expr, $path:expr) . $var:ident $($tt:tt)*) => {{
+ nix_go!(@o($o.get_field(stringify!($var)).context(concat!("getting nested ", $path))?, $path) $($tt)*)
}};
- (@o($o:expr) [ $v:expr ] $($tt:tt)*) => {{
- nix_go!(@o($o.get_field($v)?) $($tt)*)
+ (@o($o:expr, $path:expr) [ $v:expr ] $($tt:tt)*) => {{
+ nix_go!(@o($o.get_field($v).context(concat!("getting nested ", $path))?, $path) $($tt)*)
}};
- (@o($o:expr) ($($var:tt)*) $($tt:tt)*) => {
- nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+))?) $($tt)*)
+ (@o($o:expr, $path:expr) ($($var:tt)*) $($tt:tt)*) => {
+ nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+)).context(concat!("getting nested ", $path))?, $path) $($tt)*)
};
- (@o($o:expr)) => {$o};
+ (@o($o:expr, $path:expr)) => {$o};
($field:ident $($tt:tt)+) => {{
use $crate::nix_go;
+ use ::anyhow::Context;
let out = $field.clone();
- nix_go!(@o(out) $($tt)*)
+ nix_go!(@o(out, ::std::stringify!($($tt)*)) $($tt)*)
}}
}
#[macro_export]