#!/bin/sh # # Check that the code follows the coding style # # If the code does not follow the coding style a warning will be printed. # version=`gnuindent --version 2> /dev/null` if [ "x$version" = "x" ]; then version=`indent --version 2> /dev/null` if [ "x$version" = "x" ] || [[ "$version" != *GNU* ]]; then echo "Git pre-commit hook:" echo "Did not find GNU indent, please install it before continuing." exit 1 fi INDENT=indent else INDENT=gnuindent fi echo "*******************" for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR`; do ext=$(expr "$file" : ".*\(\..*\)") case $ext in .c|.h) echo "Checking code style" # ckfile is the temporary checkout and we indent it ckfile=`git checkout-index --temp ${file} | cut -f 1` newfile=`mktemp /tmp/${ckfile}.XXXXXX` || exit 1 $INDENT $ckfile -o $newfile 2>> /dev/null $INDENT $newfile 2>> /dev/null diff -u -p "${ckfile}" "${newfile}" r=$? rm "${ckfile}" rm "${newfile}" rm "${newfile}~" if [ $r != 0 ]; then echo "Warning: Code style error in $file" read -n1 -p "Do you want to CONTINUE committing? [Y/n]" opt < /dev/tty case $opt in n|N) echo exit 1 ;; *) ;; esac echo "*******************" fi exit 0 ;; *) echo "Not checking code style for this type of file" echo "*******************" ;; esac done