use std::process::Command;
fn main() {
let version = get_git_version().unwrap_or_else(|| env!("CARGO_PKG_VERSION").to_string());
println!("cargo:rustc-env=HOTSPOTS_VERSION={}", version);
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/refs/heads");
println!("cargo:rerun-if-changed=.git/refs/tags");
}
fn get_git_version() -> Option<String> {
let output = Command::new("git")
.args(["describe", "--tags", "--always", "--dirty"])
.output()
.ok()?;
if output.status.success() {
let version = String::from_utf8(output.stdout).ok()?;
let version = version.trim();
if version.starts_with('v') && !version.contains('-') {
Some(version.trim_start_matches('v').to_string())
} else if version.starts_with('v') {
if let Some(dash_pos) = version.find('-') {
Some(version[1..dash_pos].to_string())
} else {
Some(version.trim_start_matches('v').to_string())
}
} else {
let base_version = env!("CARGO_PKG_VERSION");
if let Some(clean_version) = version.strip_suffix("-dirty") {
Some(format!("{}-{}-dirty", base_version, clean_version))
} else {
Some(format!("{}-{}", base_version, version))
}
}
} else {
None
}
}