Fix bug in variables not executing if they were a command
This commit is contained in:
parent
4d840945eb
commit
5d9b7bac7a
3 changed files with 18 additions and 2 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -215,7 +215,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toke-runner"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"regex",
|
||||
|
|
|
@ -5,7 +5,7 @@ repository = "https://github.com/afonsofrancof/toke"
|
|||
readme = "README.md"
|
||||
keywords = ["cli", "toml", "command", "runner", "toke"]
|
||||
categories = ["command-line-utilities", "development-tools"]
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
|
||||
|
|
|
@ -197,6 +197,22 @@ fn replace_variables(parsed_toml: &mut toml::Value, cli_vars: HashMap<String, St
|
|||
merged_vars.insert(key.clone(), toml::Value::String(value.clone()));
|
||||
}
|
||||
|
||||
//If a variable is a command, execute it and use the output as the variable value
|
||||
for (_key, value) in merged_vars.iter_mut() {
|
||||
if let Some(value_str) = value.as_str() {
|
||||
if let Some(stripped_command) = value_str.strip_prefix('!') {
|
||||
let output = Command::new("sh")
|
||||
.arg("-c")
|
||||
.arg(stripped_command)
|
||||
.output()
|
||||
.expect("Failed to execute shell command");
|
||||
*value = toml::Value::String(
|
||||
String::from_utf8_lossy(&output.stdout).trim().to_string(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Replace variables in the target's wildcards value
|
||||
if let Some(wildcards_value) = target_table.get_mut("wildcards") {
|
||||
if let Some(wildcards_array) = wildcards_value.as_array_mut() {
|
||||
|
|
Loading…
Reference in a new issue