29 lines
567 B
Plaintext
29 lines
567 B
Plaintext
|
#!/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
|
||
|
nix fmt
|
||
|
{
|
||
|
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
|