ksud: make it buildable without git installed

This commit is contained in:
tiann
2023-02-24 11:41:32 +08:00
parent 745f109686
commit f789bb8c53

View File

@@ -4,34 +4,43 @@ use std::io::Write;
use std::path::Path; use std::path::Path;
use std::process::Command; use std::process::Command;
fn get_git_version() -> (u32, String) { fn get_git_version() -> Result<(u32, String), std::io::Error> {
let version_code = String::from_utf8( let output = Command::new("git")
Command::new("git")
.args(["rev-list", "--count", "HEAD"]) .args(["rev-list", "--count", "HEAD"])
.output() .output()?;
.expect("Failed to get git count")
.stdout, let output = output.stdout;
) let version_code = String::from_utf8(output).expect("Failed to read git count stdout");
.expect("Failed to read git count stdout");
let version_code: u32 = version_code let version_code: u32 = version_code
.trim() .trim()
.parse() .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_code = 10000 + 200 + version_code; // For historical reasons
let version_name = String::from_utf8( let version_name = String::from_utf8(
Command::new("git") Command::new("git")
.args(["describe", "--tags", "--always"]) .args(["describe", "--tags", "--always"])
.output() .output()?
.expect("Failed to get git version")
.stdout, .stdout,
) )
.expect("Failed to read git version stdout"); .map_err(|_| {
(version_code, version_name) std::io::Error::new(
std::io::ErrorKind::Other,
"Failed to read git describe stdout",
)
})?;
Ok((version_code, version_name))
} }
fn main() { 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 = env::var("OUT_DIR").expect("Failed to get $OUT_DIR");
let out_dir = Path::new(&out_dir); let out_dir = Path::new(&out_dir);
File::create(Path::new(out_dir).join("VERSION_CODE")) File::create(Path::new(out_dir).join("VERSION_CODE"))