RE: Feature request: 'git bisect run' option to redundantly check start and end commits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ed Avis wrote:
> When kicking off a 'git bisect run', I have manually chosen good and
> bad commits, but I would like to double check that the command given
> to run really does succeed for the good commit and fail for the bad
> one.  Of course I can switch to those commits and run it manually, but
> mistakes can happen.  It's frustrating to set up a bisection and then
> find at the end that the first bad commit is the one immediately after
> 'good', because the command string just failed every time.  An
> optional startup check of the two endpoints would only be a small
> slowdown in most cases, but could save a lot of time.

I like this idea.

I for one have to think twice if I should do the extra check manually or
not, and the biggest reason why I usually don't is because it would not
be automated.

With an option like that I would have no excuse.

Here's a quick patch to implement such feature (it doesn't apply
directly, it's mostly for human eyes).

diff --git a/git-bisect.sh b/git-bisect.sh
index 1f3f6e9fc5..e8adeab008 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -109,13 +109,7 @@ bisect_replay () {
 	git bisect--helper --bisect-auto-next || exit
 }
 
-bisect_run () {
-	git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
-
-	test -n "$*" || die "$(gettext "bisect run failed: no command provided.")"
-
-	while true
-	do
+run_command () {
 	command="$@"
 	eval_gettextln "running \$command"
 	"$@"
@@ -140,6 +134,41 @@ exit code \$res from '\$command' is < 0 or >= 128" >&2
 	else
 		state="$TERM_GOOD"
 	fi
+}
+
+run_check () {
+	rev=$1
+	term=$2
+	shift 2
+	git checkout $rev
+	run_command "$@"
+	echo "# recheck $term ($state): $(git show-branch $rev)" >>"$GIT_DIR/BISECT_LOG"
+	[[ "$state" != "$term" ]] &&
+	die "$(eval_gettext "check failed, expected \$rev to be \$term")"
+}
+
+bisect_run () {
+	git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
+
+	if [ "$1" = "--recheck" ]
+	then
+		shift
+		test -n "$*" || die "$(gettext "bisect run failed: no command provided.")"
+
+		rev=$(git show-ref --hash --verify refs/bisect/$TERM_BAD)
+		run_check $rev "$TERM_BAD" "$@"
+
+		rev=$(git for-each-ref --format="%(objectname)" "refs/bisect/$TERM_GOOD-*")
+		run_check $rev "$TERM_GOOD" "$@"
+
+		git bisect--helper --bisect-next || exit
+	else
+		test -n "$*" || die "$(gettext "bisect run failed: no command provided.")"
+	fi
+
+	while true
+	do
+		run_command "$@"
 
 		git bisect--helper --bisect-state $state >"$GIT_DIR/BISECT_RUN"
 		res=$?

-- 
Felipe Contreras



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux