use std::path::Path;
use crate::lockable;
#[derive(Debug, thiserror::Error)]
pub enum HookError {
#[error("{0}")]
Usage(String),
#[error(transparent)]
Io(#[from] std::io::Error),
}
pub fn post_checkout(cwd: &Path, args: &[String]) -> Result<(), HookError> {
if args.len() != 3 {
return Err(HookError::Usage(
"post-checkout: expected 3 args (prev-sha, post-sha, flag); \
this should be run through Git's post-checkout hook"
.into(),
));
}
lockable::enforce_workdir(cwd)?;
Ok(())
}
pub fn post_commit(cwd: &Path, args: &[String]) -> Result<(), HookError> {
if !args.is_empty() {
return Err(HookError::Usage(format!(
"post-commit: expected 0 args, got {}",
args.len()
)));
}
lockable::enforce_workdir(cwd)?;
Ok(())
}
pub fn post_merge(cwd: &Path, args: &[String]) -> Result<(), HookError> {
if args.len() != 1 {
return Err(HookError::Usage(
"post-merge: expected 1 arg (squash-flag); \
this should be run through Git's post-merge hook"
.into(),
));
}
lockable::enforce_workdir(cwd)?;
Ok(())
}