mod enable;
mod list;
mod run;
mod stash;
pub use enable::{disable, enable};
pub use list::list;
pub use run::run;
use std::path::{Path, PathBuf};
use standard_githooks::HookCommand;
use crate::{git, ui};
pub(super) fn hooks_dir() -> Result<PathBuf, i32> {
let cwd = std::env::current_dir().unwrap_or_default();
match git::workdir(&cwd) {
Ok(root) => Ok(root.join(".githooks")),
Err(_) => {
ui::error("not inside a git repository");
Err(1)
}
}
}
pub(super) fn is_enabled(hooks_dir: &Path, hook_name: &str) -> bool {
hooks_dir.join(hook_name).exists()
}
pub(super) fn read_and_parse_hooks(
hooks_dir: &Path,
hook_name: &str,
) -> Result<Vec<HookCommand>, i32> {
let hooks_file = hooks_dir.join(format!("{hook_name}.hooks"));
let content = match std::fs::read_to_string(&hooks_file) {
Ok(c) => c,
Err(e) => {
ui::error(&format!("cannot read {}: {e}", hooks_file.display()));
return Err(2);
}
};
Ok(standard_githooks::parse(&content))
}