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()?.trim().to_string();
(!s.is_empty()).then_some(s)
}
fn main() {
let version = std::env::var("CARGO_PKG_VERSION").expect("CARGO_PKG_VERSION is always set");
let target = std::env::var("TARGET").unwrap_or_default();
let sha = git(&["rev-parse", "--short=9", "HEAD"]);
let date = git(&["log", "-1", "--date=short", "--format=%cd"]);
let long = match (sha, date) {
(Some(sha), Some(date)) => format!("{version} ({sha} {date} {target})"),
_ => version,
};
println!("cargo:rustc-env=BOUGIE_LONG_VERSION={long}");
if let Some(git_dir) = git(&["rev-parse", "--absolute-git-dir"]) {
println!("cargo:rerun-if-changed={git_dir}/HEAD");
if let Some(head_ref) = git(&["symbolic-ref", "--quiet", "HEAD"]) {
println!("cargo:rerun-if-changed={git_dir}/{head_ref}");
}
}
}