#!/bin/sh # Git Pre-Commit Hook from http://projects.puppetlabs.com/projects/1/wiki/puppet_version_control # # Alternatives: https://gist.github.com/jumanjiman/3275053 # http://www.snijders-it.nl/2011/12/example-puppet-27-git-pre-commit-script.html # # See also http://puppetlabs.com/blog/verifying-puppet-checking-syntax-and-writing-automated-tests/ syntax_errors=0 error_msg=$(mktemp /tmp/error_msg.XXXXXX) if [ "$1" = '--about' ]; then echo "Check puppet files for syntax errors." exit fi if git rev-parse --quiet --verify HEAD > /dev/null then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # Get list of new/modified manifest and template files to check (in git index) for indexfile in `git diff-index --diff-filter=AM --name-only --cached $against | egrep '\.(pp|erb)'` do # Don't check empty files if [ `git cat-file -s :0:$indexfile` -gt 0 ] then case $indexfile in *.pp ) # Check puppet manifest syntax #git cat-file blob :0:$indexfile | puppet --color=false --parseonly --ignoreimport > $error_msg ;; # Updated for 2.7.x puppet parser validate $indexfile > $error_msg ;; *.erb ) # Check ERB template syntax # -P : ignore lines which start with "%" git cat-file blob :0:$indexfile | erb -P -x -T - | ruby -c 2> $error_msg > /dev/null ;; esac if [ "$?" -ne 0 ] then echo -n "$indexfile: " cat $error_msg syntax_errors=`expr $syntax_errors + 1` fi fi done rm -f $error_msg if [ "$syntax_errors" -ne 0 ] then echo "Error: $syntax_errors syntax errors found, aborting commit." exit 1 fi