123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #!/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"
|