use std::env;
pub(crate) mod bin_override;
pub(crate) mod cleanliness;
pub(crate) mod context;
pub use cleanliness::{ensure_git_clean, is_git_clean};
use crate::types::GitContext;
pub fn collect_git_context() -> Option<GitContext> {
let repo_root = std::env::current_dir().ok()?;
let git_program = bin_override::git_program();
if !bin_override::is_repo_root(&repo_root, &git_program) {
return None;
}
if env::var("SHIPPER_GIT_BIN").is_ok() {
let commit = bin_override::get_git_commit(&repo_root, &git_program);
let branch = bin_override::get_git_branch(&repo_root, &git_program);
let tag = bin_override::get_git_tag(&repo_root, &git_program);
let dirty = bin_override::get_git_dirty_status(&repo_root, &git_program);
return Some(GitContext {
commit,
branch,
tag,
dirty,
});
}
if !context::is_git_repo(&repo_root) {
return None;
}
Some(context::get_git_context(&repo_root))
}