| #!/bin/sh |
| |
| # This pre-commit hook will abort if a committed file doesn't pass gofmt. |
| # By Even Shaw <edsrzf@gmail.com> |
| # http://github.com/edsrzf/gofmt-git-hook |
| |
| test_fmt() { |
| hash gofmt 2>&- || { echo >&2 "gofmt not in PATH."; exit 1; } |
| IFS=' |
| ' |
| for file in `git diff --cached --name-only --diff-filter=ACM | grep '\.go$'` |
| do |
| output=`git cat-file -p :$file | gofmt -l 2>&1` |
| if test $? -ne 0 |
| then |
| output=`echo "$output" | sed "s,<standard input>,$file,"` |
| syntaxerrors="${list}${output}\n" |
| elif test -n "$output" |
| then |
| list="${list}${file}\n" |
| fi |
| done |
| exitcode=0 |
| if test -n "$syntaxerrors" |
| then |
| echo >&2 "gofmt found syntax errors:" |
| printf "$syntaxerrors" |
| exitcode=1 |
| fi |
| if test -n "$list" |
| then |
| echo >&2 "gofmt needs to format these files (run gofmt -w and git add):" |
| printf "$list" |
| exitcode=1 |
| fi |
| exit $exitcode |
| } |
| |
| case "$1" in |
| --about ) |
| echo "Check Go code formatting" |
| ;; |
| * ) |
| test_fmt |
| ;; |
| esac |