Meta/basecheck: validate the synthetic base of topics

Junio C Hamano committed Jul 18, 2026 at 19:23 UTC ccbb5aad8aec65073894715bf8bfdd247654491b
1 file changed +51
basecheck.sh new
+51
@@ -0,0 +1,51 @@
1 +#!/bin/sh
2 +
3 +if test $# = 3
4 +then
5 + merge=$1 base=$2 target=$3
6 + label=$(git log --oneline -1 "$merge")
7 +
8 + base0=$(git rev-parse "$base^0") &&
9 + base1=$(git rev-parse "$merge^2") &&
10 + test "$base0" = "$base1" || {
11 + echo >&2 "BAD: stale $base in $target"
12 + exit 2
13 + }
14 +
15 + cd ../git.one || exit 1
16 + if grep "$merge" :basecheck-tested-ok >/dev/null
17 + then
18 + exit 0
19 + elif grep "$merge" :basecheck-tested-ng >/dev/null
20 + then
21 + echo >&2 "BAD (again): $label"
22 + exit 1
23 + fi
24 +
25 + echo >&2 "Testing $merge $target"
26 + git reset --quiet --hard "$merge" || exit 1
27 + if Meta/Make -s -j32 >:basecheck-errors 2>&1
28 + then
29 + echo >&2 "OK: $label"
30 + echo "$merge" >>:basecheck-tested-ok
31 + exit 0
32 + else
33 + echo "$merge" >>:basecheck-tested-ng
34 + cat ":basecheck-errors"
35 + echo >&2 "BAD: $label"
36 + exit 1
37 + fi
38 +
39 + exit 0 ;# just in case
40 +fi
41 +
42 +git log --oneline --abbrev=-1 --min-parents=2 ..seen |
43 +sed -n -e "s|^\([0-9a-f]*\) Merge branch '\(.*\)' into \(../..*\)$|\1 \2 \3|p" |
44 +{
45 + exit=
46 + while read merge base target
47 + do
48 + "$0" "$merge" "$base" "$target" </dev/null || exit=$?
49 + done
50 + exit $exit
51 +}