use std::process::Command;
fn git(args: &[&str]) -> Option<String> {
let out = Command::new("git").args(args).output().ok()?;
if !out.status.success() {
return None;
}
let s = String::from_utf8(out.stdout).ok()?;
let s = s.trim().to_string();
if s.is_empty() { None } else { Some(s) }
}
fn main() {
if let Some(git_dir) = git(&["rev-parse", "--git-dir"]) {
println!("cargo:rerun-if-changed={git_dir}/HEAD");
}
let sha = git(&["rev-parse", "--short", "HEAD"])
.map(|sha| {
let dirty = git(&["status", "--porcelain", "--untracked-files=no"]).is_some();
if dirty { format!("{sha}-dirty") } else { sha }
})
.unwrap_or_default();
println!("cargo:rustc-env=MEMSTEAD_BUILD_SHA={sha}");
}