1use std::process::Command;
2
3pub fn git_build_id() -> String {
4 let commit = match Command::new("git")
5 .args(["rev-parse", "--short=12", "HEAD"])
6 .output()
7 {
8 Ok(output) if output.status.success() => {
9 let value = String::from_utf8_lossy(&output.stdout).trim().to_string();
10 if value.is_empty() {
11 "unknown".to_string()
12 } else {
13 value
14 }
15 }
16 _ => "unknown".to_string(),
17 };
18 let dirty = match Command::new("git").args(["status", "--porcelain"]).output() {
19 Ok(output) => output.status.success() && !output.stdout.is_empty(),
20 Err(_) => false,
21 };
22 if dirty {
23 format!("{commit}-dirty")
24 } else {
25 commit
26 }
27}