Easily manage git hooks in your composer config
The previous release had issues with hook definitions that did not have a command per line. Reverted for now, and will be revised later
When generating a new hook, the commands are now concatenated with &&
to ensure that the each command is only executed if the preceding one returns a success (0) status code
git rev-parse --git-common-dir
used to resolve the git dir, so a fallback was introduced.--ignore-lock
modification was fixed, so there should be no issues for newcomers to an existing project anymore.Thanks to @devnix for pointing out these issues!
git
is now only invoked to resolve the git-dir
if a --git-dir
is not provided--lock-dir
was added which resolves to the current working directory if not providedcghooks
in a git worktree now correctly resolves the .git
folder.cghooks
is now aware of composer dev mode, and will not add or update hooks if run in production mode (--no-dev
). This feature was REVERTED
All commands (besides the hook test ones) gained the ability to manage hooks globally with the --global
option.
Like:
# Adds hooks in global directory (falls back to git config core.hooksPath and $COMPOSER_HOME)
cghooks add --global
# You can also directly specify the directory
cghooks add --global --git-dir /home/brainmaestro/.config/git_hooks
The update
, list-hooks
and remove
commands work similarly.
This change was non-trivial because the application assumed it was always being run in the current directory. Took the opportunity for some cleanup as well.
For more complex hooks, they can be written as separate commands in an array. eg:
"pre-commit": [
"echo committing as $(git config user.name)",
"php-cs-fixer .",
"phpunit"
]
Files that are not necessary for the library are excluded with .gitattrributes