use git2::Repository; use std::path::Path; use std::{env, fs, io}; fn main() -> Result<(), io::Error> { let out_dir = env::var_os("OUT_DIR").expect( "\ OUT_DIR environment variable not found. \ OUT_DIR is guaranteed to to exist in a build script by cargo - see \ https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts\ "); let latest_commit_hash = latest_commit_hash(env::current_dir()?).unwrap_or_default(); let commit_hash_path = Path::new(&out_dir).join("git_commit_hash"); fs::write(commit_hash_path, latest_commit_hash)?; Ok(()) } fn latest_commit_hash>(dir: P) -> Result { let dir = dir.as_ref(); Ok(Repository::discover(dir)? .head()? .peel_to_commit()? .id() .to_string()) }