git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Dec 18, 2020, 15:35 UTC
Message-ID
<5fdccc25255b7_1273af2086c@natae.notmuch>
In-Reply-To
<PH0PR11MB48875130A7DF30A7394DD3619DC30@PH0PR11MB4887.namprd11.prod.outlook.com>
Ed Avis wrote:
Show 9 quoted lines
> 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
Previous: Ed AvisNext: Christian Couder
Message 2 of 7 in “Feature request: 'git bisect run' option to redundantly check start and end commits”
  1. Ed AvisDec 18, 2020
  2. Felipe ContrerasDec 18, 2020
  3. Christian CouderDec 18, 2020
  4. Felipe ContrerasDec 18, 2020
  5. Christian CouderDec 19, 2020
  6. Felipe ContrerasDec 19, 2020
  7. Junio C HamanoDec 19, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.