Skip to content

Instantly share code, notes, and snippets.

@proxypoke
Created May 24, 2012 13:32
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save proxypoke/2781569 to your computer and use it in GitHub Desktop.
Save proxypoke/2781569 to your computer and use it in GitHub Desktop.
go pre-commit git hook
#!/bin/bash
# Author: slowpoke <proxypoke at lavabit dot com>
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
#
# A pre-commit hook for go projects. In addition to the standard
# checks from the sample hook, it builds the project with go build,
# runs the tests (if any), formats the source code with go fmt, and
# finally go vet to make sure only correct and good code is committed.
#
# Take note that the ASCII filename check of the standard hook was
# removed. Go is unicode, and so should be the filenames. Stop using
# obsolete operating systems without proper Unicode support.
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If there are no go files, it makes no sense to run the other commands
# (and indeed, go build would fail). This is undesirable.
if [ -z "$(ls | grep '\.go$')" ]
then
exit 0
fi
go build >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Failed to build project. Please check the output of"
echo "go build or run commit with --no-verify if you know"
echo "what you are doing."
exit 1
fi
go test >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Failed to run tests. Please check the output of"
echo "go test or run commit with --no-verify if you know"
echo "what you are doing."
exit 1
fi
go fmt >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Failed to run go fmt. This shouldn't happen. Please"
echo "check the output of the command to see what's wrong"
echo "or run commit with --no-verify if you know what you"
echo "are doing."
exit 1
fi
go vet >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "go vet has detected potential issues in your project."
echo "Please check its output or run commit with --no-verify"
echo "if you know what you are doing."
exit 1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment