use std::env;
use std::path::Path;
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()?;
collect_git_context_at(&repo_root)
}
pub fn collect_git_context_at(repo_root: &Path) -> Option<GitContext> {
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))
}