macro_rules! string_vec {
($($str:expr),*) => ({
vec![$(String::from($str),)*] as Vec<String>
});
}
use std::path::PathBuf;
pub(crate) use string_vec;
pub fn run_command_or_exit(command: Vec<String>) {
eprintln!("[tire] $ {command:?}");
let program = &command[0];
let mut proc = std::process::Command::new(program)
.args(command[1..].iter())
.spawn()
.unwrap_or_else(|_| panic!("Failed to run program `{program}`"));
let status = proc
.wait()
.unwrap_or_else(|_| panic!("Failed to wait for program `{program}`"));
if !status.success() {
let code = status.code().unwrap();
eprintln!("Command `{program}` exited with code {code}");
std::process::exit(status.code().unwrap_or(1));
}
}
pub fn find_pyproject_toml(cwd: Option<PathBuf>) -> Option<PathBuf> {
let mut dir = cwd.ok_or("").or_else(|_| std::env::current_dir()).unwrap();
loop {
let file = dir.join("pyproject.toml");
if std::fs::exists(&file).unwrap() {
return Some(file);
}
dir = match dir.parent() {
Some(dir) => dir.to_path_buf(),
None => return None,
}
}
}