diff --git a/crates/spfs-cli/common/src/args.rs b/crates/spfs-cli/common/src/args.rs index 7e81f9a74f..bce4e1bee2 100644 --- a/crates/spfs-cli/common/src/args.rs +++ b/crates/spfs-cli/common/src/args.rs @@ -7,7 +7,7 @@ use std::panic::catch_unwind; #[cfg(feature = "sentry")] use std::sync::Mutex; -use miette::Error; +use miette::{Error, IntoDiagnostic, Result, WrapErr}; #[cfg(feature = "sentry")] use once_cell::sync::OnceCell; use spfs::io::Pluralize; @@ -447,7 +447,12 @@ impl ExternalDataViewing { "key".pluralize(num_keys), keys.join(", ") ); - println!("{}", serde_yaml::to_string(&data)?); + println!( + "{}", + serde_yaml::to_string(&data) + .into_diagnostic() + .wrap_err("Failed to generate yaml output")? + ); } else if let Some(keys) = &self.get { tracing::debug!("--get these keys: {}", keys.join(", ")); for key in keys.iter() { diff --git a/crates/spfs-cli/main/src/cmd_run.rs b/crates/spfs-cli/main/src/cmd_run.rs index badc3d0939..6eed8e117b 100644 --- a/crates/spfs-cli/main/src/cmd_run.rs +++ b/crates/spfs-cli/main/src/cmd_run.rs @@ -8,7 +8,7 @@ use std::io; use std::time::Instant; use clap::{ArgGroup, Args}; -use miette::{Context, Result}; +use miette::{miette, Context, IntoDiagnostic, Result}; use spfs::runtime::KeyValuePair; use spfs::storage::FromConfig; use spfs::tracking::EnvSpec; @@ -65,14 +65,17 @@ impl ExternalData { // Treat '-' as "read from stdin" Box::new(io::stdin()) } else { - Box::new(std::fs::File::open(filename).with_context(|| { - format!("Failed to open external data file: {filename:?}") - })?) + Box::new( + std::fs::File::open(filename) + .into_diagnostic() + .wrap_err(format!("Failed to open external data file: {filename:?}"))?, + ) }; let external_data: BTreeMap = serde_yaml::from_reader(reader) - .with_context(|| { - format!("Failed to parse as external data key-value pairs: {filename:?}") - })?; + .into_diagnostic() + .wrap_err(format!( + "Failed to parse as external data key-value pairs: {filename:?}" + ))?; data.extend(external_data); } @@ -80,7 +83,8 @@ impl ExternalData { let pair = pair.trim(); if pair.starts_with('{') { let given: BTreeMap = serde_yaml::from_str(pair) - .context("--external-data value looked like yaml, but could not be parsed")?; + .into_diagnostic() + .wrap_err("--external-data value looked like yaml, but could not be parsed")?; data.extend(given); continue; } @@ -89,7 +93,7 @@ impl ExternalData { .split_once('=') .or_else(|| pair.split_once(':')) .ok_or_else(|| { - anyhow!( + miette!( "Invalid option: -external-data {pair} (should be in the form name=value)" ) })?;