aboutsummaryrefslogtreecommitdiff
path: root/.hooks/pre-commit.d/check_portepoch
blob: 1e93cd595708601e851d6e20bebc9482159320cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh
#
# Check that PORTEPOCH is not being dropped, and is non-decreasing
#

common_functions="$(realpath "$(dirname "$0")")/common.sh"
if [ -r "${common_functions}" ]; then
	. "${common_functions}"
fi

check_epoch() {
	local makefile="$1"
	local old_epoch=$(git diff --cached -U0 "${makefile}" | grep '^-PORTEPOCH.*=' | grep -oE '[0-9]+')
	local new_epoch=$(git diff --cached -U0 "${makefile}" | grep '^+PORTEPOCH.*=' | grep -oE '[0-9]+')
	if [ -z "${new_epoch}" -a -n "${old_epoch}" ] ; then
		pre_commit_error "dropped PORTEPOCH ${old_epoch} in ${makefile}"
		exit 1
	fi
	if [ -n "${old_epoch}" ] ; then
		if [ ${new_epoch} -lt ${old_epoch} ] ; then
			pre_commit_error "PORTEPOCH decreasing from ${old_epoch} to ${new_epoch} in ${makefile}"
			exit 2
		fi
	fi
}

modified_makefiles=$(git diff --name-only --cached --diff-filter=M -GPORTEPOCH | grep -E '^[^/]+/[^/]+/Makefile$')
if [ $? -eq 0 ] ; then
	for modified_makefile in ${modified_makefiles} ; do
		check_epoch ${modified_makefile}
	done
fi