#include "builtin.h"
#include "abspath.h"
+#include "bisect.h"
#include "config.h"
#include "commit.h"
#include "environment.h"
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)) {
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 &&