use std::process::Command;
fn main() {
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/index");
let hash = git(&["rev-parse", "HEAD"]).map(|h| h.chars().take(7).collect::<String>()).unwrap_or_default();
let dirty = match Command::new("git").args(["status", "--porcelain"]).output() {
Ok(out) => out.status.success() && !out.stdout.is_empty(),
Err(_) => false,
};
let describe = if hash.is_empty() {
String::new()
} else if dirty {
format!("{hash}-dirty")
} else {
hash
};
println!("cargo:rustc-env=SCSH_GIT_DESCRIBE={describe}");
}
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_lossy(&out.stdout).trim().to_string();
if s.is_empty() {
None
} else {
Some(s)
}
}