#!/bin/sh # Check for lexical syntax of commits in the current push that refname="$1" oldrev="$2" newrev="$3" if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi # Good commit by default bad=0 IFS=' ' # If the new object is a commit... if [ "$newrev_type" = "commit" ]; then # Loop over the new revisions for c in $(git rev-list $old_rev..$newrev); do # And each new file for s in $(git ls-tree $c | egrep '\.ml(i?)$'; do f=$(echo $s | awk '{ print $3 }') name=$(echo $s | awk '{ print $4 }') tmp=$(tempfile) || exit 1 trap "rm -f -- '$tmp'" EXIT git cat-file blob $f > $tmp # $tmp now holds the content of new file $name if [ `wc -L $tmp | awk '{ print $1 }'` -gt 80 ]; then echo "Commit $c/File \"$name\" has lines with more than 80 columns." bad=1 fi grep -P '\t' $tmp > /dev/null if [ $? -eq 0 ]; then echo "Commit $c/File \"$name\" has tabulations in it." bad=1 fi grep -P '( |\t)+$' $tmp > /dev/null if [ $? -eq 0 ]; then echo "Commit $c/File \"$name\" has trailing whitespace." bad=1 fi # Delete temporary file and remove the associated trap rm -f -- '$tmp' trap - EXIT done done fi exit $bad