| #!/bin/sh | |
| tmp=/var/tmp/TopicCheck.$$ | |
| trap 'rm -fr "$tmp" "$tmp."*' 0 1 2 3 15 | |
| usage () { | |
| echo >&2 "usage: $0 [--with <base>] [--stdin | <topics>...]" | |
| } | |
| stdin= with= | |
| while case "$1" in -*) ;; *) break; esac | |
| do | |
| case "$1" in | |
| --stdin) | |
| stdin=stdin ;; | |
| --with) | |
| with="${2?<base>}" | |
| shift ;; | |
| *) | |
| usage | |
| exit 1 ;; | |
| esac | |
| shift | |
| done | |
| case "$#,$stdin" in | |
| 0,) | |
| stdin=stdin ;; | |
| esac | |
| section () { | |
| printf >&3 "\033]0;%s %s\007" "$*" | |
| printf >&3 "# %s %s\n" "$*" | |
| printf >&2 "\n\n\n\n##### %s %s\n\n\n\n" "$*" | |
| } | |
| git checkout --quiet --detach | |
| logbase=./+log/$$ | |
| mkdir -p "$logbase" | |
| exec 3>&2 | |
| onetopic () { | |
| topic="$1" rest="$2" | |
| label=${rest:-$topic} | |
| log="$logbase/$(echo "$topic" | tr '/' '-')" | |
| exec >"$log" 2>&1 | |
| if test -n "$with" | |
| then | |
| git reset --hard "$with" && | |
| git merge --quiet "$topic" | |
| else | |
| git reset --hard "$topic" | |
| fi || { | |
| echo >&2 "cannot prepare $label" | |
| return | |
| } | |
| failed= | |
| section "$label - leaks" && | |
| ( | |
| export SANITIZE=leak GIT_TEST_PASSING_SANITIZE_LEAK=true && | |
| Meta/Make -j32 CC=clang test | |
| st=$? | |
| Meta/Make -j32 CC=clang >/dev/null 2>&1 distclean | |
| exit $st | |
| ) || failed="leaks" | |
| section "$label - sha256" && | |
| ( | |
| export GIT_TEST_DEFAULT_HASH=sha256 && | |
| Meta/Make -j32 test | |
| st=$? | |
| Meta/Make >/dev/null 2>&1 distclean | |
| exit $st | |
| ) || failed="$failed${failed:+" "}sha256" | |
| section "$label - test" && | |
| ( | |
| export GIT_TEST_LONG=YesPlease && | |
| Meta/Make -j32 test | |
| st=$? | |
| Meta/Make >/dev/null 2>&1 distclean | |
| exit $st | |
| ) || failed="$failed${failed:+" "}test" | |
| section "$label - breaking" && | |
| ( | |
| Meta/Make $jobs WITH_BREAKING_CHANGES=YesPlease $T test | |
| st=$? | |
| Meta/Make WITH_BREAKING_CHANGES=YesPlease >/dev/null 2>&1 distclean | |
| exit $st | |
| ) || failed="$failed${failed:+" "}breaking" | |
| if test "$failed" = "" | |
| then | |
| rm -f "$log" | |
| else | |
| echo >&3 "failed ($failed) $label" | |
| echo >&2 "failed ($failed) $label" | |
| fi | |
| } | |
| if test "$stdin" = stdin | |
| then | |
| while read topic | |
| do | |
| echo $(git rev-parse "$topic") "$topic" | |
| done | |
| else | |
| for topic | |
| do | |
| echo $(git rev-parse "$topic") "$topic" | |
| done | |
| fi >"$tmp".lst | |
| while read oid topic | |
| do | |
| onetopic "$oid" "$topic" | |
| done <"$tmp".lst | |
| rmdir 2>/dev/null "$logbase" || : |