Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save riussi/badd4557c67befc0354e10769296dda7 to your computer and use it in GitHub Desktop.
Save riussi/badd4557c67befc0354e10769296dda7 to your computer and use it in GitHub Desktop.
#!/bin/sh
STAGED_GO_FILES=$(git diff --cached --name-only | grep ".go$")
if [[ "$STAGED_GO_FILES" = "" ]]; then
exit 0
fi
GOLINT=$GOPATH/bin/golint
GOIMPORTS=$GOPATH/bin/goimports
GOFMT=$GOROOT/bin/gofmt
# Check for golint
if [[ ! -x "$GOLINT" ]]; then
printf "\t\033[41mPlease install golint\033[0m (go get -u golang.org/x/lint/golint)"
exit 1
fi
# Check for goimports
if [[ ! -x "$GOIMPORTS" ]]; then
printf "\t\033[41mPlease install goimports\033[0m (go get golang.org/x/tools/cmd/goimports)"
exit 1
fi
PASS=true
for FILE in $STAGED_GO_FILES
do
# Run goimports and gofmt on the staged file
$GOIMPORTS -w $FILE
$GOFMT -w $FILE
# Run golint on the staged file and check the exit status
$GOLINT "-set_exit_status" $FILE
if [[ $? == 1 ]]; then
printf "\t\033[31mgolint $FILE\033[0m \033[0;30m\033[41mFAILURE!\033[0m\n"
PASS=false
else
printf "\t\033[32mgolint $FILE\033[0m \033[0;30m\033[42mpass\033[0m\n"
fi
# Run govet on the staged file and check the exit status
go vet $FILE
if [[ $? != 0 ]]; then
printf "\t\033[31mgo vet $FILE\033[0m \033[0;30m\033[41mFAILURE!\033[0m\n"
PASS=false
else
printf "\t\033[32mgo vet $FILE\033[0m \033[0;30m\033[42mpass\033[0m\n"
fi
done
if ! $PASS; then
printf "\033[0;30m\033[41mCOMMIT FAILED\033[0m\n"
exit 1
else
printf "\033[0;30m\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment