Meta/cycle-run: build each branch separately

Junio C Hamano committed Mar 20, 2021 at 23:40 UTC 8b76b1495f082229d40cf4c0fed84a247beddd71
1 file changed +88
cycle-run new
+88
@@ -0,0 +1,88 @@
1 +#!/bin/sh
2 +
3 +: ${RANGE:=origin/master..origin/seen} ${J:=j32} ${OKNG:="(OK|NG)"}
4 +
5 +test_it () {
6 + commit=$1 subject=$2
7 + log=".Cycle/log.$commit"
8 + rm -f "$log"
9 + git ls-files -x Meta -x .Cycle -o -z | xargs -r -0 rm -rf
10 +
11 + (
12 + echo "*** log for $subject ***" &&
13 +
14 + D= &&
15 + git checkout --detach "$commit" &&
16 + if ! Meta/Make -$J
17 + then
18 + D=DEVELOPER=
19 + Meta/Make -$J -- DEVELOPER=
20 + fi &&
21 + Meta/Make -$J -- $D test &&
22 + Meta/Make -$J -- $D doc
23 +
24 + status=$?
25 +
26 + # Does 'distclean' clean them up properly?
27 + Meta/Make -- $D distclean >/dev/null
28 + case $(git ls-files -x Meta -x .Cycle -o | wc -l) in
29 + 0) exit "$status" ;;
30 + *) git ls-files -x Meta -x .Cycle -o
31 + exit 1 ;;
32 + esac
33 + ) >"$log" 2>&1
34 + case $? in
35 + 0) rm -f "$log" ;;
36 + *) return 1 ;;
37 + esac
38 +}
39 +
40 +test_them () {
41 + while read merge parent sides
42 + do
43 + for side in $sides
44 + do
45 + git rev-parse --verify --quiet "$side" || continue
46 + echo "TEST M $merge"
47 + egrep "^$OKNG $side" .Cycle/log >/dev/null && continue
48 + echo "TEST $side $merge"
49 + done
50 + done |
51 + sed -n -e 's/^TEST //p' >.Cycle/plan
52 +
53 + count=$(wc -l <.Cycle/plan)
54 + case $count in 0) return ;; esac
55 +
56 + total=$count
57 + echo TEST $count ON $(date) >>.Cycle/log
58 + while read side merge
59 + do
60 + case "$side" in
61 + M)
62 + commit=$merge
63 + subject=$(git show -s --format="%s" "$merge") ;;
64 + *)
65 + commit=$side
66 + subject=$(
67 + git show -s --format="%s" "$merge" |
68 + sed -e 's/^Merge branch '\''\(.*\)'\'' into .*/\1/'
69 + ) ;;
70 + esac
71 +
72 + echo >&2 -n "$count/$total ?? $subject "
73 + if test_it $commit "$subject"
74 + then
75 + OK=OK
76 + else
77 + OK=NG
78 + fi
79 + echo "$OK $commit $count" >>.Cycle/log
80 + echo >&2 "$count/$total $OK $subject"
81 + count=$(( $count - 1 ))
82 + done <.Cycle/plan
83 +}
84 +
85 +: >>.Cycle/log
86 +git fetch
87 +git rev-list --first-parent --parents $RANGE |
88 +test_them