From: Jonas Rebmann <kernel@schlaraffenlan.de>
To: git@vger.kernel.org
Cc: Chris Down <chris@chrisdown.name>, Jeff King <peff@peff.net>,
Jonas Rebmann <kernel@schlaraffenlan.de>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Subject: [PATCH v3 2/2] rev-parse: use selected alternate terms to look up refs
Date: Fri, 17 Apr 2026 18:48:31 +0200 [thread overview]
Message-ID: <20260417-bisect-terms-v3-2-d659fa547261@schlaraffenlan.de> (raw)
In-Reply-To: <20260417-bisect-terms-v3-0-d659fa547261@schlaraffenlan.de>
git rev-parse --bisect does not work when alternate bisect terms are
used, simply listing no revisions at all.
This is because a such bisect using e.g. "old" and "new" in place of
"good" and "bad" will name refs "refs/bisect/old" (or new) accordingly
so the hardcoded "refs/bisect/bad" (and good) yields no results in a
bisect using alternate terms.
Use the current bisect_terms to make rev-parse --bisect work in an
alternate term bisect.
Signed-off-by: Jonas Rebmann <kernel@schlaraffenlan.de>
---
builtin/rev-parse.c | 15 +++++++++++++--
t/t1500-rev-parse.sh | 25 +++++++++++++++++++++++++
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 218b5f34d6..7531edae9e 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -10,6 +10,7 @@
#include "builtin.h"
#include "abspath.h"
+#include "bisect.h"
#include "config.h"
#include "commit.h"
#include "environment.h"
@@ -940,13 +941,23 @@ int cmd_rev_parse(int argc,
continue;
}
if (!strcmp(arg, "--bisect")) {
+ char *prefix;
+ char *term_bad = NULL;
+ char *term_good = NULL;
struct refs_for_each_ref_options opts = { 0 };
- opts.prefix = "refs/bisect/bad";
+ read_bisect_terms(&term_bad, &term_good);
+ prefix = xstrfmt("refs/bisect/%s", term_bad);
+ opts.prefix = prefix;
refs_for_each_ref_ext(get_main_ref_store(the_repository),
show_reference, NULL, &opts);
- opts.prefix = "refs/bisect/good";
+ free(prefix);
+ prefix = xstrfmt("refs/bisect/%s", term_good);
+ opts.prefix = prefix;
refs_for_each_ref_ext(get_main_ref_store(the_repository),
anti_reference, NULL, &opts);
+ free(prefix);
+ free(term_good);
+ free(term_bad);
continue;
}
if (opt_with_value(arg, "--branches", &arg)) {
diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
index 98c5a772bd..38067d95f7 100755
--- a/t/t1500-rev-parse.sh
+++ b/t/t1500-rev-parse.sh
@@ -337,6 +337,31 @@ test_expect_success 'rev-parse --bisect includes bad, excludes good' '
test_cmp expect actual
'
+test_expect_success 'rev-parse --bisect works with alternate terms' '
+ test_commit_bulk 6 &&
+
+ git bisect start --term-old=known --term-new=curious &&
+
+ git update-ref refs/bisect/curious-1 HEAD~1 &&
+ git update-ref refs/bisect/bad HEAD~2 &&
+ git update-ref refs/bisect/curious-3 HEAD~3 &&
+ git update-ref refs/bisect/known-3 HEAD~3 &&
+ git update-ref refs/bisect/curious-4 HEAD~4 &&
+ git update-ref refs/bisect/good HEAD~4 &&
+
+ # Note: refs/bisect/bad and refs/bisect/goood should be ignored because this
+ # is a bisect with custom terms (known/curious)
+ cat >expect <<-EOF &&
+ refs/bisect/curious-1
+ refs/bisect/curious-3
+ refs/bisect/curious-4
+ ^refs/bisect/known-3
+ EOF
+
+ git rev-parse --symbolic-full-name --bisect >actual &&
+ test_cmp expect actual
+'
+
test_expect_success '--short= truncates to the actual hash length' '
git rev-parse HEAD >expect &&
git rev-parse --short=100 HEAD >actual &&
--
2.53.0
prev parent reply other threads:[~2026-04-17 17:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-17 16:48 [PATCH v3 0/2] Avoid hardcoded "good"/"bad" bisect terms Jonas Rebmann
2026-04-17 16:48 ` [PATCH v3 1/2] bisect: use selected alternate terms in status output Jonas Rebmann
2026-04-17 19:50 ` Junio C Hamano
2026-04-17 16:48 ` Jonas Rebmann [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260417-bisect-terms-v3-2-d659fa547261@schlaraffenlan.de \
--to=kernel@schlaraffenlan.de \
--cc=chris@chrisdown.name \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox