forked from Mirrors/freeswitch
108 lines
2.5 KiB
Bash
Executable File
108 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
|
##### Author: Travis Cross <tc@traviscross.com>
|
|
|
|
log1 () { printf '%s' "$1">&2; }
|
|
log () { printf '%s\n' "$1">&2; }
|
|
err () { log "$1"; exit 1; }
|
|
|
|
usage () {
|
|
log "usage: $0"
|
|
}
|
|
|
|
while getopts "h" o; do
|
|
case "$o" in
|
|
h) usage; exit 0; ;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND-1))
|
|
|
|
runscript=$(mktemp /tmp/bisectrunXXXXXXXX)
|
|
touch $runscript
|
|
chmod +x $runscript
|
|
cat > $runscript <<'EOF'
|
|
#!/bin/sh
|
|
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
|
##### Author: Travis Cross <tc@traviscross.com>
|
|
|
|
build_fs () (
|
|
set -e
|
|
unset CC CXX CPPFLAGS CFLAGS CXXFLAGS LDFLAGS V VERBOSE
|
|
export V=1 VERBOSE=1
|
|
git clean -fdx
|
|
git reset --hard HEAD
|
|
{ git describe HEAD \
|
|
&& ./bootstrap.sh -j \
|
|
&& ./configure -C --enable-fhs \
|
|
&& make -j; } 2>&1 | tee build.log
|
|
)
|
|
|
|
good () { exit 0; }
|
|
bad () { exit 1; }
|
|
skip () { exit 125; }
|
|
|
|
printf "Building FS...\n"
|
|
if ! build_fs; then
|
|
printf "FS didn't build correctly, skipping this revision...\n"
|
|
skip
|
|
fi
|
|
printf "OK, now 'make install' if needed and test for the issue...\n"
|
|
printf "When done, type 'exit'\n"
|
|
bash
|
|
tested=""
|
|
while test -z "$tested"; do
|
|
printf "Were you able to test the issue at this revision? [y/n]: "
|
|
read tested
|
|
done
|
|
if test "$tested" != "y"; then
|
|
printf "OK, we're skipping this revision then...\n"
|
|
skip
|
|
fi
|
|
reproduced=""
|
|
while test -z "$reproduced"; do
|
|
printf "Did the issue reproduce at this revision? [y/n]: "
|
|
read reproduced
|
|
done
|
|
if test "$reproduced" = "y"; then
|
|
printf "OK, marking this as a bad revision...\n"
|
|
bad
|
|
else
|
|
printf "OK, marking this as a good revision...\n"
|
|
good
|
|
fi
|
|
EOF
|
|
|
|
run_bisect () {
|
|
goods=""
|
|
bad=""
|
|
paths=""
|
|
while test -z "$bad"; do
|
|
printf "Enter git hash of earliest known bad revision: "
|
|
read bad_
|
|
[ -z "$bad_" ] || bad="$bad_"
|
|
done
|
|
good_=""
|
|
while test -z "$goods" || ! test -z "$good_"; do
|
|
printf "Enter git hash of latest known good revisions ('.' to end): "
|
|
read good_
|
|
[ "$good_" = "." ] && good_=""
|
|
[ -z "$good_" ] || goods="$good_ "
|
|
done
|
|
path_="_"
|
|
while ! test -z "$path_"; do
|
|
printf "(optional) Enter source path related to issue ('.' to end): "
|
|
read path_
|
|
[ "$path_" = "." ] && path_=""
|
|
[ -z "$path_" ] || paths="$path_ "
|
|
done
|
|
printf "Starting git bisect...\n"
|
|
git bisect start $bad $goods -- $paths
|
|
git bisect run $runscript
|
|
rm -f $runscript
|
|
git bisect reset
|
|
}
|
|
|
|
bisectlog=/tmp/$(date -u +%Y%m%dT%H%M%SZ)-bisect_log.txt
|
|
run_bisect | tee $bisectlog
|
|
printf "\n\nNow please upload $bisectlog to JIRA.\n"
|