Browse Source

Add '--bisect' revision machinery argument

I personally use "git bisect visualize" all the time when I bisect, but it
turns out that that is not a very flexible model. Sometimes I want to do
bisection based on all commits (no pathname limiting), but then visualize
the current bisection tree with just a few pathnames because I _suspect_
those pathnames are involved in the problem but am not totally sure about
them.

And at other times, I want to use other revision parsing logic, none of
which is available with "git bisect visualize".

So this adds "--bisect" as a revision parsing argument, and as a result it
just works with all the normal logging tools. So now I can just do

	gitk --bisect --simplify-by-decoration filename-here

etc.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Linus Torvalds 15 years ago committed by Junio C Hamano
parent
commit
ad3f9a71a8
  1. 2
      builtin-rev-list.c
  2. 11
      builtin-rev-parse.c
  3. 19
      revision.c
  4. 1
      revision.h

2
builtin-rev-list.c

@ -319,6 +319,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) @@ -319,6 +319,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)

memset(&info, 0, sizeof(info));
info.revs = &revs;
if (revs.bisect)
bisect_list = 1;

quiet = DIFF_OPT_TST(&revs.diffopt, QUIET);
for (i = 1 ; i < argc; i++) {

11
builtin-rev-parse.c

@ -180,6 +180,12 @@ static int show_reference(const char *refname, const unsigned char *sha1, int fl @@ -180,6 +180,12 @@ static int show_reference(const char *refname, const unsigned char *sha1, int fl
return 0;
}

static int anti_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
{
show_rev(REVERSED, sha1, refname);
return 0;
}

static void show_datestring(const char *flag, const char *datestr)
{
static char buffer[100];
@ -548,6 +554,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) @@ -548,6 +554,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
for_each_ref(show_reference, NULL);
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);
continue;
}
if (!strcmp(arg, "--branches")) {
for_each_branch_ref(show_reference, NULL);
continue;

19
revision.c

@ -994,7 +994,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg @@ -994,7 +994,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
if (!strcmp(arg, "--all") || !strcmp(arg, "--branches") ||
!strcmp(arg, "--tags") || !strcmp(arg, "--remotes") ||
!strcmp(arg, "--reflog") || !strcmp(arg, "--not") ||
!strcmp(arg, "--no-walk") || !strcmp(arg, "--do-walk"))
!strcmp(arg, "--no-walk") || !strcmp(arg, "--do-walk") ||
!strcmp(arg, "--bisect"))
{
unkv[(*unkc)++] = arg;
return 1;
@ -1218,6 +1219,16 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, @@ -1218,6 +1219,16 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
ctx->argc -= n;
}

static int for_each_bad_bisect_ref(each_ref_fn fn, void *cb_data)
{
return for_each_ref_in("refs/bisect/bad", fn, cb_data);
}

static int for_each_good_bisect_ref(each_ref_fn fn, void *cb_data)
{
return for_each_ref_in("refs/bisect/good", fn, cb_data);
}

/*
* Parse revision information, filling in the "rev_info" structure,
* and removing the used arguments from the argument list.
@ -1259,6 +1270,12 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch @@ -1259,6 +1270,12 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
handle_refs(revs, flags, for_each_branch_ref);
continue;
}
if (!strcmp(arg, "--bisect")) {
handle_refs(revs, flags, for_each_bad_bisect_ref);
handle_refs(revs, flags ^ UNINTERESTING, for_each_good_bisect_ref);
revs->bisect = 1;
continue;
}
if (!strcmp(arg, "--tags")) {
handle_refs(revs, flags, for_each_tag_ref);
continue;

1
revision.h

@ -63,6 +63,7 @@ struct rev_info { @@ -63,6 +63,7 @@ struct rev_info {
reverse:1,
reverse_output_stage:1,
cherry_pick:1,
bisect:1,
first_parent_only:1;

/* Diff flags */

Loading…
Cancel
Save