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

[PATCH] bisect: fix quoting TRIED revs when "bad" commit is also "skip"ped

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 26, 2009, 07:29 UTC
Message-ID
<20090226082918.6adbc565.chriscool@tuxfamily.org>

Before this patch, when the "bad" commit was also "skip"ped and when more than one commit was skipped, the "filter_skipped" function would have printed something like:

bisect_rev=<hash1>|<hash2>
(where <hash1> and <hash2> are hexadecimal sha1 hashes)

and this would have been evaled later as piping "bisect_rev=<hash1>" into "<hash2>", which would have failed.

So this patch makes the "filter_skipped" function properly quote what it outputs, so that it will print something like:

bisect_rev="<hash1>|<hash2>"
which will be properly evaled later.
A test case is added to the test suite.

And while at it, we also remove a spurious space where the "exit_if_skipped_commits" function is defined.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 git-bisect.sh               |    4 ++--
 t/t6030-bisect-porcelain.sh |   25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/git-bisect.sh b/git-bisect.sh
index 85db4ba..105bc6a 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -309,7 +309,7 @@ filter_skipped() {
 			# This should happen only if the "bad"
 			# commit is also a "skip" commit.
 			,,*,bisect_rev*)
-				echo "bisect_rev=$TRIED"
+				echo "bisect_rev=\"$TRIED\""
 				VARS=1
 				;;
 
@@ -342,7 +342,7 @@ filter_skipped() {
 	done
 }
 
-exit_if_skipped_commits () {
+exit_if_skipped_commits() {
 	_tried=$1
 	if expr "$_tried" : ".*[|].*" > /dev/null ; then
 		echo "There are only 'skip'ped commit left to test."
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index dd7eac8..b5da16f 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -224,6 +224,31 @@ test_expect_success 'bisect skip: cannot tell between 2 commits' '
 	fi
 '
 
+# $HASH1 is good, $HASH4 is both skipped and bad, we skip $HASH3
+# and $HASH2 is good,
+# so we should not be able to tell the first bad commit
+# among $HASH3 and $HASH4
+test_expect_success 'bisect skip: with commit both bad and skipped' '
+	git bisect start &&
+	git bisect skip &&
+	git bisect bad &&
+	git bisect good $HASH1 &&
+	git bisect skip &&
+	if git bisect good > my_bisect_log.txt
+	then
+		echo Oops, should have failed.
+		false
+	else
+		test $? -eq 2 &&
+		grep "first bad commit could be any of" my_bisect_log.txt &&
+		test_must_fail grep $HASH1 my_bisect_log.txt &&
+		test_must_fail grep $HASH2 my_bisect_log.txt &&
+		grep $HASH3 my_bisect_log.txt &&
+		grep $HASH4 my_bisect_log.txt &&
+		git bisect reset
+	fi
+'
+
 # We want to automatically find the commit that
 # introduced "Another" into hello.
 test_expect_success \
-- 
1.6.2.rc1.20.g8c5b.dirty
Next: Junio C Hamano
Message 1 of 6 in “bisect: fix quoting TRIED revs when "bad" commit is also "skip"ped”
  1. bisect: fix quoting TRIED revs when "bad" commit is also "skip"pedChristian Couder, Feb 26, 2009
  2. Junio C HamanoFeb 26, 2009
  3. Christian CouderFeb 27, 2009
  4. Junio C HamanoFeb 27, 2009
  5. Christian CouderFeb 27, 2009
  6. Junio C HamanoFeb 27, 2009

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.