summaryrefslogtreecommitdiff
path: root/basecheck.sh
blob: 6ca58bc96345e68e69cca42d1b543f70668cdbb4 (plain)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

if test $# = 3
then
	merge=$1 base=$2 target=$3
	label=$(git log --oneline -1 "$merge")

	base0=$(git rev-parse "$base^0") &&
	base1=$(git rev-parse "$merge^2") &&
	test "$base0" = "$base1" || {
		echo >&2 "BAD: stale $base in $target"
		exit 2
	}

	cd ../git.one || exit 1
	if grep "$merge" :basecheck-tested-ok >/dev/null
	then
		exit 0
	elif grep "$merge" :basecheck-tested-ng >/dev/null
	then
		echo >&2 "BAD (again): $label"
		exit 1
	fi

	echo >&2 "Testing $merge $target"
	git reset --quiet --hard "$merge" || exit 1
	if Meta/Make -s -j32 >:basecheck-errors 2>&1
	then
		echo >&2 "OK: $label"
		echo "$merge" >>:basecheck-tested-ok
		exit 0
	else
		echo "$merge" >>:basecheck-tested-ng
		cat ":basecheck-errors"
		echo >&2 "BAD: $label"
		exit 1
	fi

	exit 0 ;# just in case
fi

git log --oneline --abbrev=-1 --min-parents=2 ..seen |
sed -n -e "s|^\([0-9a-f]*\) Merge branch '\(.*\)' into \(../..*\)$|\1 \2 \3|p" |
{
	exit=
	while read merge base target
	do
		"$0" "$merge" "$base" "$target" </dev/null || exit=$?
	done
	exit $exit
}