Raw
1 #!/bin/sh
2
3 tmp=/var/tmp/TopicCheck.$$
4 trap 'rm -fr "$tmp" "$tmp."*' 0 1 2 3 15
5
6 usage () {
7 echo >&2 "usage: $0 [--with <base>] [--stdin | <topics>...]"
8 }
9
10 stdin= with=
11 while case "$1" in -*) ;; *) break; esac
12 do
13 case "$1" in
14 --stdin)
15 stdin=stdin ;;
16 --with)
17 with="${2?<base>}"
18 shift ;;
19 *)
20 usage
21 exit 1 ;;
22 esac
23 shift
24 done
25
26 case "$#,$stdin" in
27 0,)
28 stdin=stdin ;;
29 esac
30
31 section () {
32 printf >&3 "\033]0;%s %s\007" "$*"
33 printf >&3 "# %s %s\n" "$*"
34 printf >&2 "\n\n\n\n##### %s %s\n\n\n\n" "$*"
35 }
36
37 git checkout --quiet --detach
38
39 logbase=./+log/$$
40 mkdir -p "$logbase"
41
42 exec 3>&2
43
44 onetopic () {
45 topic="$1" rest="$2"
46 label=${rest:-$topic}
47 log="$logbase/$(echo "$topic" | tr '/' '-')"
48 exec >"$log" 2>&1
49
50 if test -n "$with"
51 then
52 git reset --hard "$with" &&
53 git merge --quiet "$topic"
54 else
55 git reset --hard "$topic"
56 fi || {
57 echo >&2 "cannot prepare $label"
58 return
59 }
60
61 failed=
62
63 section "$label - leaks" &&
64 (
65 export SANITIZE=leak GIT_TEST_PASSING_SANITIZE_LEAK=true &&
66 Meta/Make -j32 CC=clang test
67 st=$?
68 Meta/Make -j32 CC=clang >/dev/null 2>&1 distclean
69 exit $st
70 ) || failed="leaks"
71
72 section "$label - sha256" &&
73 (
74 export GIT_TEST_DEFAULT_HASH=sha256 &&
75 Meta/Make -j32 test
76 st=$?
77 Meta/Make >/dev/null 2>&1 distclean
78 exit $st
79 ) || failed="$failed${failed:+" "}sha256"
80
81 section "$label - test" &&
82 (
83 export GIT_TEST_LONG=YesPlease &&
84 Meta/Make -j32 test
85 st=$?
86 Meta/Make >/dev/null 2>&1 distclean
87 exit $st
88 ) || failed="$failed${failed:+" "}test"
89
90 section "$label - breaking" &&
91 (
92 Meta/Make $jobs WITH_BREAKING_CHANGES=YesPlease $T test
93 st=$?
94 Meta/Make WITH_BREAKING_CHANGES=YesPlease >/dev/null 2>&1 distclean
95 exit $st
96 ) || failed="$failed${failed:+" "}breaking"
97
98 if test "$failed" = ""
99 then
100 rm -f "$log"
101 else
102 echo >&3 "failed ($failed) $label"
103 echo >&2 "failed ($failed) $label"
104 fi
105 }
106
107 if test "$stdin" = stdin
108 then
109 while read topic
110 do
111 echo $(git rev-parse "$topic") "$topic"
112 done
113 else
114 for topic
115 do
116 echo $(git rev-parse "$topic") "$topic"
117 done
118 fi >"$tmp".lst
119
120 while read oid topic
121 do
122 onetopic "$oid" "$topic"
123 done <"$tmp".lst
124
125 rmdir 2>/dev/null "$logbase" || :