Fix --nix-option flag

This commit is contained in:
i1i1 2023-08-11 18:17:16 +03:00 committed by Zhaofeng Li
parent 5e17c629b2
commit fc5c6d4544
2 changed files with 7 additions and 20 deletions

View file

@ -127,7 +127,6 @@ struct Opts {
impure: bool, impure: bool,
#[arg( #[arg(
long, long,
value_parser = crate::util::parse_key_val::<String, String>,
help = "Passes an arbitrary option to Nix commands", help = "Passes an arbitrary option to Nix commands",
long_help = r#"Passes arbitrary options to Nix commands long_help = r#"Passes arbitrary options to Nix commands
@ -135,9 +134,9 @@ This only works when building locally.
"#, "#,
global = true, global = true,
num_args = 2, num_args = 2,
value_names = ["NAME, VALUE"], value_names = ["NAME", "VALUE"],
)] )]
nix_option: Vec<(String, String)>, nix_option: Vec<String>,
#[arg( #[arg(
long, long,
value_name = "WHEN", value_name = "WHEN",
@ -263,8 +262,11 @@ async fn get_hive(opts: &Opts) -> ColmenaResult<Hive> {
hive.set_impure(true); hive.set_impure(true);
} }
for (name, value) in opts.nix_option.iter().cloned() { for chunks in opts.nix_option.chunks_exact(2) {
hive.add_nix_option(name, value); let [name, value] = chunks else {
unreachable!()
};
hive.add_nix_option(name.clone(), value.clone());
} }
Ok(hive) Ok(hive)

View file

@ -1,5 +1,4 @@
use std::convert::TryFrom; use std::convert::TryFrom;
use std::error::Error;
use std::process::Stdio; use std::process::Stdio;
@ -192,20 +191,6 @@ impl CommandExt for CommandExecution {
} }
} }
/// Parse a single key-value pair
pub fn parse_key_val<T, U>(s: &str) -> Result<(T, U), Box<dyn Error + Send + Sync + 'static>>
where
T: std::str::FromStr,
T::Err: Error + Send + Sync + 'static,
U: std::str::FromStr,
U::Err: Error + Send + Sync + 'static,
{
let pos = s
.find('=')
.ok_or_else(|| format!("invalid KEY=value: no `=` found in `{s}`"))?;
Ok((s[..pos].parse()?, s[pos + 1..].parse()?))
}
pub async fn capture_stream<R>( pub async fn capture_stream<R>(
mut stream: BufReader<R>, mut stream: BufReader<R>,
job: Option<JobHandle>, job: Option<JobHandle>,