diff --git a/userspace/ksud/build.rs b/userspace/ksud/build.rs index f208ee88..f619f5d6 100644 --- a/userspace/ksud/build.rs +++ b/userspace/ksud/build.rs @@ -4,34 +4,43 @@ use std::io::Write; use std::path::Path; use std::process::Command; -fn get_git_version() -> (u32, String) { - let version_code = String::from_utf8( - Command::new("git") - .args(["rev-list", "--count", "HEAD"]) - .output() - .expect("Failed to get git count") - .stdout, - ) - .expect("Failed to read git count stdout"); +fn get_git_version() -> Result<(u32, String), std::io::Error> { + let output = Command::new("git") + .args(["rev-list", "--count", "HEAD"]) + .output()?; + + let output = output.stdout; + let version_code = String::from_utf8(output).expect("Failed to read git count stdout"); let version_code: u32 = version_code .trim() .parse() - .expect("Failed to parse git count"); + .map_err(|_| std::io::Error::new(std::io::ErrorKind::Other, "Failed to parse git count"))?; let version_code = 10000 + 200 + version_code; // For historical reasons let version_name = String::from_utf8( Command::new("git") .args(["describe", "--tags", "--always"]) - .output() - .expect("Failed to get git version") + .output()? .stdout, ) - .expect("Failed to read git version stdout"); - (version_code, version_name) + .map_err(|_| { + std::io::Error::new( + std::io::ErrorKind::Other, + "Failed to read git describe stdout", + ) + })?; + Ok((version_code, version_name)) } fn main() { - let (code, name) = get_git_version(); + let (code, name) = match get_git_version() { + Ok((code, name)) => (code, name), + Err(_) => { + // show warning if git is not installed + println!("cargo:warning=Failed to get git version, using 0.0.0"); + (0, "0.0.0".to_string()) + } + }; let out_dir = env::var("OUT_DIR").expect("Failed to get $OUT_DIR"); let out_dir = Path::new(&out_dir); File::create(Path::new(out_dir).join("VERSION_CODE"))