Skip to content

Commit

Permalink
feat: set usage arguments and flags as environment variables for toml…
Browse files Browse the repository at this point in the history
… tasks (jdx#4070)
  • Loading branch information
gturi committed Jan 19, 2025
1 parent f675c8f commit aca4155
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions src/cli/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?;
}
}
Expand Down Expand Up @@ -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(" "))
Expand All @@ -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<String>
) -> 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<String> = 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,
Expand Down

0 comments on commit aca4155

Please sign in to comment.