ksud: make it buildable without git installed
This commit is contained in:
@@ -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")
|
let output = output.stdout;
|
||||||
.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"))
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ pub fn on_boot_completed() -> Result<()> {
|
|||||||
let module_img = Path::new(defs::MODULE_IMG);
|
let module_img = Path::new(defs::MODULE_IMG);
|
||||||
if module_update_img.exists() {
|
if module_update_img.exists() {
|
||||||
// this is a update and we successfully booted
|
// this is a update and we successfully booted
|
||||||
|
std::fs::rename(module_update_img, module_img)?;
|
||||||
if std::fs::rename(module_update_img, module_img).is_err() {
|
if std::fs::rename(module_update_img, module_img).is_err() {
|
||||||
warn!("Failed to rename images, copy it now.",);
|
warn!("Failed to rename images, copy it now.",);
|
||||||
std::fs::copy(module_update_img, module_img)
|
std::fs::copy(module_update_img, module_img)
|
||||||
|
|||||||
Reference in New Issue
Block a user