
Make the pre-commit check spit out cut-and-paste commands and be more obvious about errors. Tested by making an invalid change and observing the message generated.
48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
KUBE_HOOKS_DIR="$(dirname "$(test -L "$0" && echo "$(dirname $0)/$(readlink "$0")" || echo "$0")")"
|
|
|
|
files_need_gofmt=""
|
|
files_need_boilerplate=""
|
|
for file in $(git diff --cached --name-only --diff-filter ACM | grep "\.go" | grep -v "third_party"); do
|
|
# Check for files that fail gofmt.
|
|
diff="$(git show ":${file}" | gofmt -s -d)"
|
|
if [[ -n "$diff" ]]; then
|
|
files_need_gofmt="${files_need_gofmt} ${file}"
|
|
fi
|
|
|
|
# Check for files without the required boilerplate.
|
|
boilerplate="$(${KUBE_HOOKS_DIR}/boilerplate.sh ${file})"
|
|
if [[ "$boilerplate" -eq "0" ]]; then
|
|
files_need_boilerplate="${files_need_boilerplate} ${file}"
|
|
fi
|
|
done
|
|
|
|
if [[ -n "${files_need_gofmt}" ]]; then
|
|
(
|
|
echo
|
|
echo "# *** ERROR: *** Some files have not been gofmt'd. To fix these"
|
|
echo "# errors, run gofmt -s -w <file>, or cut and paste the following:"
|
|
echo "# gofmt -s -w ${files_need_gofmt}"
|
|
echo "#"
|
|
echo "# Your commit will be aborted unless you override this warning. To"
|
|
echo "# commit in spite of these format errors, delete the following line:"
|
|
echo "# COMMIT_BLOCKED_ON_GOFMT"
|
|
) >> $1
|
|
fi
|
|
|
|
if [[ -n "${files_need_boilerplate}" ]]; then
|
|
(
|
|
echo
|
|
echo "# *** ERROR: *** Some files are missing the required boilerplate"
|
|
echo "# header from hooks/boilerplate.txt:"
|
|
for file in ${files_need_boilerplate}; do
|
|
echo "# ${file}"
|
|
done
|
|
echo "#"
|
|
echo "# Your commit will be aborted unless you fix these."
|
|
echo "# COMMIT_BLOCKED_ON_BOILERPLATE"
|
|
echo
|
|
) >> $1
|
|
fi
|