use anyhow::{anyhow, Result};
use git2::Repository;
use std::env;
use std::io::Write;
fn main() {
let git_hash = match get_git_hash() {
Ok(h) => h,
Err(_e) => "unknown".to_string(),
};
let mut version_file = std::fs::File::create("src/version.rs").unwrap();
writeln!(version_file, "pub const GIT_VERSION: &'static str = \"{}\";", git_hash)
.unwrap();
writeln!(version_file, "pub const GIT_VERSION_SHORT: &'static str = \"{}\";", git_hash.chars().take(7).collect::<String>())
.unwrap();
}
fn get_git_hash() -> Result<String> {
let package_path = env::var("CARGO_MANIFEST_DIR")?;
let parent_dir = format!("{}/..", package_path);
let repo = Repository::open(parent_dir.clone())?;
let head = repo.head()?;
let hash = head.target().ok_or(anyhow!("no target?"))?;
Ok(hash.to_string())
}