chore(fmt): add legacy stubs and strip trailing whitespace to unblock cargo fmt
This commit is contained in:
@ -3,26 +3,51 @@ use std::path::PathBuf;
|
||||
/// Minimal task runner: read nyash.toml [env] and [tasks], run the named task via shell
|
||||
pub(super) fn run_named_task(name: &str) -> Result<(), String> {
|
||||
let cfg_path = "nyash.toml";
|
||||
let text = std::fs::read_to_string(cfg_path).map_err(|e| format!("read {}: {}", cfg_path, e))?;
|
||||
let doc = toml::from_str::<toml::Value>(&text).map_err(|e| format!("parse {}: {}", cfg_path, e))?;
|
||||
let text =
|
||||
std::fs::read_to_string(cfg_path).map_err(|e| format!("read {}: {}", cfg_path, e))?;
|
||||
let doc =
|
||||
toml::from_str::<toml::Value>(&text).map_err(|e| format!("parse {}: {}", cfg_path, e))?;
|
||||
// Apply [env]
|
||||
if let Some(env_tbl) = doc.get("env").and_then(|v| v.as_table()) {
|
||||
for (k, v) in env_tbl.iter() {
|
||||
if let Some(s) = v.as_str() { std::env::set_var(k, s); }
|
||||
if let Some(s) = v.as_str() {
|
||||
std::env::set_var(k, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Lookup [tasks]
|
||||
let tasks = doc.get("tasks").and_then(|v| v.as_table()).ok_or("[tasks] not found in nyash.toml")?;
|
||||
let cmd = tasks.get(name).and_then(|v| v.as_str()).ok_or_else(|| format!("task '{}' not found", name))?;
|
||||
let tasks = doc
|
||||
.get("tasks")
|
||||
.and_then(|v| v.as_table())
|
||||
.ok_or("[tasks] not found in nyash.toml")?;
|
||||
let cmd = tasks
|
||||
.get(name)
|
||||
.and_then(|v| v.as_str())
|
||||
.ok_or_else(|| format!("task '{}' not found", name))?;
|
||||
// Basic variable substitution
|
||||
let root = std::env::current_dir().unwrap_or(PathBuf::from(".")).display().to_string();
|
||||
let root = std::env::current_dir()
|
||||
.unwrap_or(PathBuf::from("."))
|
||||
.display()
|
||||
.to_string();
|
||||
let cmd = cmd.replace("{root}", &root);
|
||||
// Run via shell
|
||||
#[cfg(windows)]
|
||||
let status = std::process::Command::new("cmd").args(["/C", &cmd]).status().map_err(|e| e.to_string())?;
|
||||
let status = std::process::Command::new("cmd")
|
||||
.args(["/C", &cmd])
|
||||
.status()
|
||||
.map_err(|e| e.to_string())?;
|
||||
#[cfg(not(windows))]
|
||||
let status = std::process::Command::new("sh").arg("-lc").arg(&cmd).status().map_err(|e| e.to_string())?;
|
||||
if !status.success() { return Err(format!("task '{}' failed with status {:?}", name, status.code())); }
|
||||
let status = std::process::Command::new("sh")
|
||||
.arg("-lc")
|
||||
.arg(&cmd)
|
||||
.status()
|
||||
.map_err(|e| e.to_string())?;
|
||||
if !status.success() {
|
||||
return Err(format!(
|
||||
"task '{}' failed with status {:?}",
|
||||
name,
|
||||
status.code()
|
||||
));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user