From aca4155abd832414efbcaa43a3166357a8ad902e Mon Sep 17 00:00:00 2001 From: gventurini Date: Sun, 19 Jan 2025 10:35:23 +0100 Subject: [PATCH] feat: set usage arguments and flags as environment variables for toml tasks (#4070) --- src/cli/run.rs | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/cli/run.rs b/src/cli/run.rs index 8c36126a30..56548a82cb 100644 --- a/src/cli/run.rs +++ b/src/cli/run.rs @@ -464,6 +464,8 @@ impl Run { for (script, args) in task.render_run_scripts_with_args(self.cd.clone(), &task.args, &env)? { + let get_args = || task.run.iter().chain(task.args.iter()).cloned().collect(); + self.parse_usage_spec_and_init_env(task, &mut env, get_args)?; self.exec_script(&script, &args, task, &env, &prefix)?; } } @@ -578,14 +580,8 @@ impl Run { let mut env = env.clone(); let command = file.to_string_lossy().to_string(); let args = task.args.iter().cloned().collect_vec(); - let (spec, _) = task.parse_usage_spec(self.cd.clone(), &env)?; - if !spec.cmd.args.is_empty() || !spec.cmd.flags.is_empty() { - let args = once(command.clone()).chain(args.clone()).collect_vec(); - let po = usage::parse(&spec, &args).map_err(|err| eyre!(err))?; - for (k, v) in po.as_env() { - env.insert(k, v); - } - } + let get_args = || once(command.clone()).chain(args.clone()).collect_vec(); + self.parse_usage_spec_and_init_env(task, &mut env, get_args)?; if !self.quiet(Some(task)) { let cmd = format!("{} {}", display_path(file), args.join(" ")) @@ -599,6 +595,32 @@ impl Run { self.exec(file, &args, task, &env, prefix) } + fn parse_usage_spec_and_init_env( + &self, + task: &Task, + env: &mut EnvMap, + get_args: impl Fn() -> Vec + ) -> Result<()> { + let (spec, _) = task.parse_usage_spec(self.cd.clone(), &env)?; + if !spec.cmd.args.is_empty() || !spec.cmd.flags.is_empty() { + let args: Vec = get_args(); + //let args = //once("node".to_string()) + // once("/home/turi/.config/mise/test.js".to_string()) + // .chain(task.args.clone()).collect_vec(); + //println!("Usage parsing taskargs {:?}", task.args); + //println!("Usage parsing args {:?}", args); + //println!("Task run {:?}", task.run); + let po = usage::parse(&spec, &args).map_err(|err| eyre!(err))?; + //println!("Arg in map {}", po.as_env().len()); + for (k, v) in po.as_env() { + //println!("Adding key {} value {} in env", k, v); + env.insert(k, v); + } + } + + Ok(()) + } + fn exec( &self, file: &Path,