29 lines
567 B
Bash
Executable File
29 lines
567 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# To install:
|
|
# ln -sf ../../scripts/pre-commit .git/hooks/pre-commit
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
readarray staged < <(git diff --name-only --cached)
|
|
[[ ${#staged[@]} = 0 ]] && exit
|
|
unstash() {
|
|
local ret=$?
|
|
set +e
|
|
git stash pop -q
|
|
exit "$ret"
|
|
}
|
|
git stash push --quiet --keep-index --message "pre-commit"
|
|
trap unstash EXIT
|
|
treefmt
|
|
{
|
|
changed=$(git diff --name-only --exit-code);
|
|
status=$?;
|
|
} || true
|
|
if [[ $status -ne 0 ]]; then
|
|
exec 1>&2
|
|
echo Files changed by pre-commit hook:
|
|
echo "$changed"
|
|
exit $status
|
|
fi
|