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

[PATCH] rev-parse: don't trim bisect refnames

From
Jeff King <peff@peff.net>
Date
Sep 6, 2017, 11:53 UTC
Message-ID
<20170906115310.kxgjrnmrehm5m32q@sigill.intra.peff.net>
In-Reply-To
<CA+55aFw==7bqv0dH=cQruXbGjMw-WNrRMreMsYy_4NcrbiWSEA@mail.gmail.com>
On Tue, Sep 05, 2017 at 03:13:41PM -0700, Linus Torvalds wrote:
Show 5 quoted lines
> On Tue, Sep 5, 2017 at 3:03 PM, Jeff King <peff@peff.net> wrote:
> >
> > This probably fixes it:
> 
> Yup. Thanks.
Thanks for confirming. Here it is with a commit message and test.
-- >8 --
Subject: [PATCH] rev-parse: don't trim bisect refnames

Using for_each_ref_in() with a full refname has always been a questionable practice, but it became an error with b9c8e7f2fb (prefix_ref_iterator: don't trim too much, 2017-05-22), making "git rev-parse --bisect" pretty reliably show a BUG.

Commit 03df567fbf (for_each_bisect_ref(): don't trim refnames, 2017-06-18) fixed this case for revision.c, but rev-parse handles this option on its own. We can use the same solution here (and piggy-back on its test).

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/rev-parse.c        |  4 ++--
 t/t6002-rev-list-bisect.sh | 18 ++++++++++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 2bd28d3c08..9f24004c0a 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -757,8 +757,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 				continue;
 			}
 			if (!strcmp(arg, "--bisect")) {
-				for_each_ref_in("refs/bisect/bad", show_reference, NULL);
-				for_each_ref_in("refs/bisect/good", anti_reference, NULL);
+				for_each_fullref_in("refs/bisect/bad", show_reference, NULL, 0);
+				for_each_fullref_in("refs/bisect/good", anti_reference, NULL, 0);
 				continue;
 			}
 			if (opt_with_value(arg, "--branches", &arg)) {
diff --git a/t/t6002-rev-list-bisect.sh b/t/t6002-rev-list-bisect.sh
index 534903bbd2..a661408038 100755
--- a/t/t6002-rev-list-bisect.sh
+++ b/t/t6002-rev-list-bisect.sh
@@ -236,17 +236,31 @@ test_sequence "--bisect"
 #
 #
 
-test_expect_success '--bisect can default to good/bad refs' '
+test_expect_success 'set up fake --bisect refs' '
 	git update-ref refs/bisect/bad c3 &&
 	good=$(git rev-parse b1) &&
 	git update-ref refs/bisect/good-$good $good &&
 	good=$(git rev-parse c1) &&
-	git update-ref refs/bisect/good-$good $good &&
+	git update-ref refs/bisect/good-$good $good
+'
 
+test_expect_success 'rev-list --bisect can default to good/bad refs' '
 	# the only thing between c3 and c1 is c2
 	git rev-parse c2 >expect &&
 	git rev-list --bisect >actual &&
 	test_cmp expect actual
 '
 
+test_expect_success 'rev-parse --bisect can default to good/bad refs' '
+	git rev-parse c3 ^b1 ^c1 >expect &&
+	git rev-parse --bisect >actual &&
+
+	# output order depends on the refnames, which in turn depends on
+	# the exact sha1s. We just want to make sure we have the same set
+	# of lines in any order.
+	sort <expect >expect.sorted &&
+	sort <actual >actual.sorted &&
+	test_cmp expect.sorted actual.sorted
+'
+
 test_done
-- 
2.14.1.757.g8fad538cea
Previous: Linus TorvaldsNext: Michael Haggerty
Message 6 of 9 in “BUG: attempt to trim too many characters”
  1. Linus TorvaldsSep 5, 2017
  2. Jeff KingSep 5, 2017
  3. Linus TorvaldsSep 5, 2017
  4. Jeff KingSep 5, 2017
  5. Linus TorvaldsSep 5, 2017
  6. rev-parse: don't trim bisect refnamesJeff King, Sep 6, 2017
  7. Michael HaggertySep 6, 2017
  8. Linus TorvaldsSep 13, 2017
  9. Jeff KingSep 13, 2017

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.