use std::process::Command;
fn main() {
let commit =
capture(&["rev-parse", "--short", "HEAD"]).unwrap_or_else(|| "unknown".to_string());
let dirty = capture(&["status", "--porcelain"]).is_some_and(|status| !status.is_empty());
println!(
"cargo:rustc-env=TIX_BUILD_COMMIT={commit}{}",
if dirty { "-dirty" } else { "" }
);
let seconds = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map_or(0, |elapsed| elapsed.as_secs());
println!("cargo:rustc-env=TIX_BUILD_UNIX={seconds}");
}
fn capture(args: &[&str]) -> Option<String> {
let output = Command::new("git").args(args).output().ok()?;
if !output.status.success() {
return None;
}
let text = String::from_utf8_lossy(&output.stdout).trim().to_string();
(!text.is_empty()).then_some(text)
}