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
							parent
							
								
									78d553b7d7
								
							
						
					
					
						commit
						ad3f9a71a8
					
				|  | @ -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++) { | ||||
|  |  | |||
|  | @ -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) | |||
| 				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
								
								
								
								
							
							
						
						
									
										19
									
								
								revision.c
								
								
								
								
							|  | @ -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, | |||
| 	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 | |||
| 				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; | ||||
|  |  | |||
|  | @ -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…
	
		Reference in New Issue
	
	 Linus Torvalds
						Linus Torvalds