heptagon/tools/git-hooks/update
2010-06-26 16:34:02 +02:00

72 lines
1.7 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "Usage: $0 <ref> <oldrev> <newrev>" >&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