use std::fs;
use std::process::Command;
fn main() {
let sha = Command::new("git")
.args(["rev-parse", "--short", "HEAD"])
.output()
.ok()
.filter(|output| output.status.success())
.and_then(|output| String::from_utf8(output.stdout).ok())
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty());
let sha = match sha {
Some(sha) if is_dirty() => format!("{sha}-dirty"),
Some(sha) => sha,
None => "unknown".to_string(),
};
println!("cargo:rustc-env=AUDITMYSITE_BUILD_SHA={sha}");
println!("cargo:rerun-if-changed=.git/HEAD");
if let Ok(head) = fs::read_to_string(".git/HEAD") {
if let Some(ref_path) = head.trim().strip_prefix("ref: ") {
println!("cargo:rerun-if-changed=.git/{ref_path}");
}
}
println!("cargo:rerun-if-changed=.auditmysite-build-rs-always-rerun-marker");
}
fn is_dirty() -> bool {
Command::new("git")
.args(["status", "--porcelain"])
.output()
.ok()
.filter(|output| output.status.success())
.is_some_and(|output| !output.stdout.is_empty())
}