Viewing: test-commit-msg.sh

#!/usr/bin/bash

program=$0
progdir=$(\cd $(dirname $0) >/dev/null && pwd)

die() {
	echo "$program fatal error:  $*"
	exit 1
} 1>&2

TEMPFILE=$(mktemp ${TMPDIR:-.}/commit-XXXXXX)
test -f "$TEMPFILE" || die "mktemp fails"
trap "rm -f $TEMPFILE COMMIT*" EXIT

# Pass through xtrace setting to commit-msg script
#
SHELL=${SHELL:-sh}
shopt -qo xtrace && SHELL+=' -x'

test $# -eq 0 && set -- ${progdir}/commit.*

export FAIL=""
readonly report_fmt='%-20s %s\n'
for f; do
	case "$f" in
	( *.orig | *.rej ) continue ;;
	esac

	cp $f $TEMPFILE
	results=$(exec 2>&1 ${SHELL} $progdir/../commit-msg $TEMPFILE)
	case $'\n'"$results" in
	( *$'\nerror:'* ) OK=0 ;;
	( * ) OK=1 ;;
	esac

	f=$(basename $f)
	case $OK${f#*commit.} in
	1ok*)	printf "$report_fmt" $f: "PASS (was allowed)" ;;
	0ok*)	printf "$report_fmt" $f: "FAIL (not allowed)"; FAIL="$FAIL $f";;
	0*)	printf "$report_fmt" $f: "PASS (found error)" ;;
	*)	printf "$report_fmt" $f: "FAIL (no error)"   ; FAIL="$FAIL $f";;
	esac
done

if [ -n "$FAIL" ]; then
	echo -e "\nerror: commit-msg test(s) failed!" 1>&2
	echo "	 $FAIL"
fi

rm -f $TEMPFILE $TEMPFILE.*

## Local Variables:
## Mode: shell-script
## sh-basic-offset:          8
## sh-indent-after-do:       8
## sh-indentation:           8
## sh-indent-for-case-label: 0
## sh-indent-for-case-alt:   8
## indent-tabs-mode:         t
## End: