#!/bin/sh
set -eu
refname="$1"
oldrev="$2"
newrev="$3"

if [ "$refname" != "refs/heads/master" ] ; then
	exit 0
fi

if git diff --name-only --diff-filter=ACMR $oldrev $newrev | grep src/tools/pgindent/typedefs.list > /dev/null; then
	# if typedefs.list is changed, we need to re-run pgindent on all files
	files='src contrib'
else
	files=$(git diff --name-only --diff-filter=ACMR $oldrev $newrev)
fi

check_indent () {
	export GIT_WORK_TREE=$(mktemp -d)
	trap 'rm -rf "$GIT_WORK_TREE"' EXIT
	git checkout -f $newrev -- $files src/tools/pgindent/pgindent src/tools/pgindent/typedefs.list
	# no need to filter files - pgindent ignores everything that isn't a
	# .c or .h file
	cd $GIT_WORK_TREE

	src/tools/pgindent/pgindent --silent-diff $files && return 0
	exec 2>&1
	echo 'You need a pgindent run, e.g:'
	echo 'src/tools/pgindent/pgindent src'
	exit 1
}

# nothing to do if there are no files
test -z "$files" && exit 0
check_indent
