use std::process::Command;
fn git_stdout(args: &[&str]) -> Option<String> {
let output = Command::new("git").args(args).output().ok()?;
if !output.status.success() {
return None;
}
let text = String::from_utf8(output.stdout).ok()?;
let trimmed = text.trim();
if trimmed.is_empty() {
None
} else {
Some(trimmed.to_owned())
}
}
fn main() {
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/index");
if let Some(head_ref) = git_stdout(&["symbolic-ref", "HEAD"])
&& let Some(ref_path) = git_stdout(&["rev-parse", "--git-path", &head_ref])
{
println!("cargo:rerun-if-changed={ref_path}");
}
if let Some(hash) = git_stdout(&["rev-parse", "--short", "HEAD"]) {
println!("cargo:rustc-env=LATTICE_GIT_HASH={hash}");
let dirty = git_stdout(&["status", "--porcelain"]).is_some();
let flag = if dirty { "1" } else { "0" };
println!("cargo:rustc-env=LATTICE_GIT_DIRTY={flag}");
}
}