91 lines
2.2 KiB
Bash
91 lines
2.2 KiB
Bash
debug () {
|
|
if [ "$HUSKY_DEBUG" = "true" ] || [ "$HUSKY_DEBUG" = "1" ]; then
|
|
echo "husky:debug $1"
|
|
fi
|
|
}
|
|
|
|
command_exists () {
|
|
command -v "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
run_command () {
|
|
if command_exists "$1"; then
|
|
"$@" husky-run $hookName $gitParams
|
|
|
|
exitCode="$?"
|
|
debug "$* husky-run exited with $exitCode exit code"
|
|
|
|
if [ $exitCode -eq 127 ]; then
|
|
echo "Can't find Husky, skipping $hookName hook"
|
|
echo "You can reinstall it using 'npm install husky --save-dev' or delete this hook"
|
|
else
|
|
exit $exitCode
|
|
fi
|
|
|
|
else
|
|
echo "Can't find $1 in PATH: $PATH"
|
|
echo "Skipping $hookName hook"
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
hookIsDefined () {
|
|
grep -qs $hookName \
|
|
package.json \
|
|
.huskyrc \
|
|
.huskyrc.json \
|
|
.huskyrc.yaml \
|
|
.huskyrc.yml
|
|
}
|
|
|
|
huskyVersion="0.0.0"
|
|
gitParams="$*"
|
|
hookName="$(basename "$0")"
|
|
|
|
debug "husky v$huskyVersion - $hookName"
|
|
|
|
# Skip if HUSKY_SKIP_HOOKS is set
|
|
if [ "$HUSKY_SKIP_HOOKS" = "true" ] || [ "$HUSKY_SKIP_HOOKS" = "1" ]; then
|
|
debug "HUSKY_SKIP_HOOKS is set to $HUSKY_SKIP_HOOKS, skipping hook"
|
|
exit 0
|
|
fi
|
|
|
|
# Source user var and change directory
|
|
. "$(dirname "$0")/husky.local.sh"
|
|
debug "Current working directory is $(pwd)"
|
|
|
|
# Skip fast if hookName is not defined
|
|
# Don't skip if .huskyrc.js or .huskyrc.config.js are used as the heuristic could
|
|
# fail due to the dynamic aspect of JS. For example:
|
|
# `"pre-" + "commit"` or `require('./config/hooks')`)
|
|
if [ ! -f .huskyrc.js ] && [ ! -f huskyrc.cjs ] && [ ! -f husky.config.js ] && [ ! -f husky.config.cjs ] && ! hookIsDefined; then
|
|
debug "$hookName config not found, skipping hook"
|
|
exit 0
|
|
fi
|
|
|
|
# Source user ~/.huskyrc
|
|
if [ -f ~/.huskyrc ]; then
|
|
debug "source ~/.huskyrc"
|
|
. ~/.huskyrc
|
|
fi
|
|
|
|
# Set HUSKY_GIT_STDIN from stdin
|
|
case $hookName in
|
|
"pre-push"|"post-rewrite")
|
|
export HUSKY_GIT_STDIN="$(cat)";;
|
|
esac
|
|
|
|
# Windows 10, Git Bash and Yarn 1 installer
|
|
if command_exists winpty && test -t 1; then
|
|
exec < /dev/tty
|
|
fi
|
|
|
|
# Run husky-run with the package manager used to install Husky
|
|
case $packageManager in
|
|
"npm") run_command npx --no-install;;
|
|
"npminstall") run_command npx --no-install;;
|
|
"pnpm") run_command pnpx --no-install;;
|
|
"yarn") run_command yarn run --silent;;
|
|
*) echo "Unknown package manager: $packageManager"; exit 0;;
|
|
esac
|