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