#!/bin/sh # # Check that the code follows a consistant code style # # Check for existence of indent, and error out if not present. # On some *bsd systems the binary seems to be called gnunindent, # so check for that first. version=$(gnuindent --version 2>/dev/null) if test -z "$version"; then version=$(gindent --version 2>/dev/null) if test -z "$version"; then version=$(indent --version 2>/dev/null) if test -z "$version"; then echo "GStreamer git pre-commit hook:" echo "Did not find GNU indent, please install it before continuing." exit 1 else INDENT=indent fi else INDENT=gindent fi else INDENT=gnuindent fi case $($INDENT --version) in GNU*) ;; default) echo "GStreamer git pre-commit hook:" echo "Did not find GNU indent, please install it before continuing." echo "(Found $INDENT, but it doesn't seem to be GNU indent)" exit 1 ;; esac INDENT_PARAMETERS="--braces-on-if-line \ --case-brace-indentation0 \ --case-indentation2 \ --braces-after-struct-decl-line \ --line-length80 \ --no-tabs \ --cuddle-else \ --dont-line-up-parentheses \ --continuation-indentation4 \ --honour-newlines \ --tab-size8 \ --indent-level2 \ --leave-preprocessor-space" echo "--Checking style--" for file in $(git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$") ; do # nf is the temporary checkout. This makes sure we check against the # revision in the index (and not the checked out version). nf=$(git checkout-index --temp ${file} | cut -f 1) newfile=$(mktemp /tmp/${nf}.XXXXXX) || exit 1 $INDENT ${INDENT_PARAMETERS} \ $nf -o $newfile 2>> /dev/null # FIXME: Call indent twice as it tends to do line-breaks # different for every second call. $INDENT ${INDENT_PARAMETERS} \ $newfile 2>> /dev/null diff -u -p "${nf}" "${newfile}" r=$? rm "${newfile}" rm "${nf}" if [ $r != 0 ] ; then ERROR_FILES="$ERROR_FILES $file" echo "=================================================================================================" echo " Code style error in: $file " echo "=================================================================================================" echo "" fi done if [ -n "$ERROR_FILES" ];then echo "=================================================================================================" echo " Code style error in: " for file in $ERROR_FILES ; do echo " $file" done echo " " echo " Please fix before committing. Don't forget to run git add before trying to commit again. " echo " If the whole file is to be committed, this should work (run from the top-level directory): " echo " scripts/gst-indent$ERROR_FILES ; git add$ERROR_FILES ; git commit" echo " " echo "=================================================================================================" exit 1 fi csharp_files=$( git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "^subprojects/gstreamer-sharp/.*cs$" ) if test -n "$csharp_files"; then version=$(dotnet-format --version 2>/dev/null) if test -z "$version"; then echo "GStreamer git pre-commit hook:" echo "Did not find dotnet-format required to format C# files, please install it before continuing." exit 1 fi scripts/format-csharp --check r=$? if [ $r != 0 ] ; then echo "=================================================================================================" echo " Code style error: " echo " " echo " Please fix before committing, running from the top-level directory: " echo " scripts/format-chsarp " echo " " echo " Don't forget to run git add before trying to commit again. " echo "=================================================================================================" exit 1 fi fi echo "--Checking style pass--"