hoox is an application / library that allows users to manage git hooks as part of the repository.
The Git hooks will contain calls to the hoox cli, therefore making it necessary that the hoox CLI is installed in order to execute the Git hooks. If it is not installed, the hooks will fail and prevent the operation (by default).
In order to initialize a repo you can either:
- Add hoox to the dev-dependencies of the crate you're working with (if you're working on a rust project)
This command installs hoox in the git repository during the build process (using a custom
cargo add hoox --dev
build.rs) even when it's not in the rootCargo.toml. It moves up the directory path, starting from theOUT_DIRenv variable during build (usually thetargetfolder), to find the first folder containing a.gitsubfolder. - OR install hoox manually into the Git folder with
This method works the same way as the method mentioned above although it does not use the
hoox init
OUT_DIRenv variable that is present during build but it uses the current working directory of the shell (cwd).
To run hooks manually, use:
hoox run $HOOK_NAMEIf the hook $HOOK_NAME was not specified in the .hoox.toml file, this command will fail. In order to make the command succeed and ignore the missing hook definition, pass the --ignore-missing parameter.
version: "0.0.0"
verbosity: all
.cargo: &cargo !inline |-
set -e
set -u
cargo +nightly fmt --all -- --check
cargo test --all
hooks:
"pre-commit":
# use YAML anchor
- command: *cargo
# use inline command
- command: !inline |-
cargo doc --no-deps
verbosity: stderr
severity: warn
# reference a script file (path is relative to Git repo root)
- command: !file "./hello_world.sh"
# reference a script file with custom program
- command: !file "./hello_world.py"
program: ["python3", "-c"]
verbosity: stderr
severity: error
"pre-push":
# re-use YAML anchor
- command: *cargo
"prepare-commit-msg":
# write to $COMMIT_MSG_FILE ($1) which is going to be the template commit message for this commit
# which is subsequently opened in the $EDITOR program.
# $0 = path to "hoox.yaml" file in any hook
- command: !inline |-
COMMIT_MSG_FILE=$1
echo "Work in progress" > $COMMIT_MSG_FILEapplypatch-msgcommit-msgpost-applypatchpost-checkoutpost-commitpost-mergepost-receivepost-rewritepost-updatepre-applypatchpre-auto-gcpre-commitpre-pushpre-rebasepre-receiveprepare-commit-msgpush-to-checkoutsendemail-validateupdate
