All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Pranit Bauva <pranit.bauva@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [RFC/PATCH v11 13/13] bisect--helper: `bisect_start` shell function partially in C
Date: Tue, 02 Aug 2016 13:19:00 -0700	[thread overview]
Message-ID: <xmqqr3a6divf.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <0102015640423d18-86d50542-5e5d-40ff-860e-caf56146982d-000000@eu-west-1.amazonses.com> (Pranit Bauva's message of "Sun, 31 Jul 2016 09:21:38 +0000")

Pranit Bauva <pranit.bauva@gmail.com> writes:

> +static int bisect_start(struct bisect_terms *terms, int no_checkout,
> +			const char **argv, int argc)
> +{
> +	int i, j, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
> +	int flag;
> +	struct string_list revs = STRING_LIST_INIT_DUP;
> +	struct string_list states = STRING_LIST_INIT_DUP;
> +	struct strbuf start_head = STRBUF_INIT;
> +	const char *head;
> +	unsigned char sha1[20];
> +	FILE *fp;
> +	struct object_id oid;
> +
> +	if (is_bare_repository())
> +		no_checkout = 1;
> +
> +	for(i = 0; i < argc; i++) {

SP after for.

> +		if (!strcmp(argv[i], "--")) {
> +			has_double_dash = 1;
> +			break;
> +		}
> +		if (!strcmp(argv[i], "--term-good")) {
> +			must_write_terms = 1;
> +			strbuf_reset(&terms->term_good);
> +			strbuf_addstr(&terms->term_good, argv[++i]);
> +			break;
> +		}
> +		if (!strcmp(argv[i], "--term-bad")) {
> +			must_write_terms = 1;
> +			strbuf_reset(&terms->term_bad);
> +			strbuf_addstr(&terms->term_bad, argv[++i]);
> +			break;
> +		}

The original was not careful, either, but what if the user ends the
command line with "--term-good", without anything after it?

Also the original is prepared to handle --term-good=boa; because
this function can be be called directly from the UI (i.e. "git
bisect start --term-good=boa"), not supporting that form would be
seen as a regression.

> +		if (starts_with(argv[i], "--") &&
> +		    !one_of(argv[i], "--term-good", "--term-bad", NULL)) {
> +			string_list_clear(&revs, 0);
> +			string_list_clear(&states, 0);
> +			die(_("unrecognised option: '%s'"), argv[i]);
> +		}
> +		if (get_oid(argv[i], &oid) || has_double_dash) {

Calling get_oid() alone is insufficient to make sure argv[i] refers
to an existing object that is a committish.  The "^{commit}" suffix
in the original is there for a reason.

> +			string_list_clear(&revs, 0);
> +			string_list_clear(&revs, 0);

You seem to want the revs list really really clean ;-)

> +			die(_("'%s' does not appear to be a valid revision"), argv[i]);
> +		}
> +		else
> +			string_list_append(&revs, oid_to_hex(&oid));
> +	}
> +
> +	for (j = 0; j < revs.nr; j++) {

Why "j", not "i", as clearly the previous loop has finished at this
point?  The only reason why replacing "j" with "i" would make this
function buggy would be if a later part of this function depended on
the value of "i" when the control left the above loop, but if that
were the case (I didn't check carefully), such a precious value that
has long term effect throughout the remainder of the function must
not be kept in an otherwise throw-away loop counter variable "i".

Introduce a new "int pathspec_pos" and set it to "i" immediately
after the "for (i = 0; i < argc; i++) { ... }" loop above, perhaps.

> +		struct strbuf state = STRBUF_INIT;
> +		/*
> +		 * The user ran "git bisect start <sha1> <sha1>", hence
> +		 * did not explicitly specify the terms, but we are already
> +		 * starting to set references named with the default terms,
> +		 * and won't be able to change afterwards.
> +		 */
> +		must_write_terms = 1;
> +
> +		if (bad_seen)
> +			strbuf_addstr(&state, terms->term_good.buf);
> +		else {
> +			bad_seen = 1;
> +			strbuf_addstr(&state, terms->term_bad.buf);
> +		}
> +		string_list_append(&states, state.buf);
> +		strbuf_release(&state);
> +	}

How about this instead?

	/*
         * that comment block goes here
         */
       	must_write_terms = !!revs.nr;
	for (i = 0; i < revs.nr; i++) {
                if (bad_seen)
                	string_list_append(&states, terms->term_good.buf);
		else
                	string_list_append(&states, terms->term_bad.buf);
	}

> +
> +	/*
> +	 * Verify HEAD
> +	 */
> +	head = resolve_ref_unsafe("HEAD", 0, sha1, &flag);

The last parameter is a set of flag bits, so call it flags.

> +	if (!head) {
> +		if (get_sha1("HEAD", sha1)) {
> +			string_list_clear(&revs, 0);
> +			string_list_clear(&states, 0);
> +			die(_("Bad HEAD - I need a HEAD"));

We see many repeated calls to clear these two string lists before
exiting with failure, either by dying or return -1.

I wonder how bad the resulting code would look like if we employed
the standard pattern of having a "fail_return:" label at the end of
the function (after the "return" for the usual control flow) to
clear them.  If the result becomes less readable (and I suspect that
you would end up making it less readable), leaving the current code
structure is OK.

> +		}
> +	}
> +	if (!is_empty_or_missing_file(git_path_bisect_start())) {
> +		/* Reset to the rev from where we started */
> +		strbuf_read_file(&start_head, git_path_bisect_start(), 0);
> +		strbuf_trim(&start_head);
> +		if (!no_checkout) {
> +			struct argv_array argv = ARGV_ARRAY_INIT;
> +			argv_array_pushl(&argv, "checkout", start_head.buf,
> +					 "--", NULL);
> +			if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) {
> +				error(_("checking out '%s' failed. Try again."),
> +				      start_head.buf);

The original suggests to try "git bisect reset" here to recover.

> +				strbuf_release(&start_head);
> +				string_list_clear(&revs, 0);
> +				string_list_clear(&states, 0);
> +				return -1;
> +			}
> +		}
> +	} else {
> +		if (starts_with(head, "refs/head/") || !get_oid(head, &oid)) {

get_oid() is insufficient to ensure what you have in $head is
40-hex.  I think you meant get_oid_hex() here.

> +			/*
> +			 * This error message should only be triggered by
> +			 * cogito usage, and cogito users should understand
> +			 * it relates to cg-seek.
> +			 */
> +			if (!is_empty_or_missing_file(git_path_head_name())) {
> +				strbuf_release(&start_head);
> +				string_list_clear(&revs, 0);
> +				string_list_clear(&states, 0);
> +				die(_("won't bisect on cg-seek'ed tree"));
> +			}
> +			if (starts_with(head, "refs/heads/")) {

skip_prefix(), perhaps, if "head" is no longer used from here on?

> +	/*
> +	 * Write new start state
> +	 */
> +	fp = fopen(git_path_bisect_start(), "w");
> +	if (!fp) {
> +		bisect_clean_state();
> +		strbuf_release(&start_head);
> +		string_list_clear(&revs, 0);
> +		string_list_clear(&states, 0);
> +		return -1;
> +	}
> +	if (!fprintf(fp, "%s\n", start_head.buf)) {

man 3 fprintf and look for "Return Value"?

> +		fclose(fp);
> +		bisect_clean_state();
> +		strbuf_release(&start_head);
> +		string_list_clear(&revs, 0);
> +		string_list_clear(&states, 0);
> +		return -1;
> +	}
> +	fclose(fp);

Perhaps use write_file() instead of the above block of text?

> +	if (no_checkout) {
> +		get_oid(start_head.buf, &oid);
> +		if (update_ref(NULL, "BISECT_HEAD", oid.hash, NULL, 0,
> +			       UPDATE_REFS_MSG_ON_ERR)) {

Doesn't the original use --no-deref for this update-ref call?

> +			bisect_clean_state();
> +			strbuf_release(&start_head);
> +			string_list_clear(&revs, 0);
> +			string_list_clear(&states, 0);
> +			return -1;
> +		}
> +	}
> +	strbuf_release(&start_head);
> +	fp = fopen(git_path_bisect_names(), "w");
> +
> +	for (; i < argc; i++) {
> +		if (!fprintf(fp, "%s ", argv[i])) {

man 3 fprintf and look for "Return Value"?

More importantly, the original does --sq-quote so that BISECT_NAMES
file can be read back by a shell.  This is important as argv[i] can
have whitespace in it, and you are concatenating them with SP in
between here.  Also you are not terminating that line.

> +			fclose(fp);
> +			bisect_clean_state();
> +			string_list_clear(&revs, 0);
> +			string_list_clear(&states, 0);
> +			return -1;
> +		}
> +	}
> +	fclose(fp);

Perhaps

	strbuf_reset(&bisect_names);
	if (pathspec_pos < argc)
		sq_quote_argv(&bisect_names, argv + pathspec_pos, 0);
	write_file(git_path_bisect_names(), "%s\n", bisect_names.buf);

or something like that?

> +	for (j = 0; j < states.nr; j ++) {

Again, is "i" still precious here?  Style: drop SP between j and ++.

> +	fp = fopen(git_path_bisect_log(), "a");
> +	if (!fp) {
> +		bisect_clean_state();
> +		return -1;
> +	}
> +	if (!fprintf(fp, "git bisect start")) {
> +		bisect_clean_state();
> +		return -1;
> +	}
> +	for (i = 0; i < argc; i++) {
> +		if (!fprintf(fp, " '%s'", argv[i])) {
> +			fclose(fp);
> +			bisect_clean_state();
> +			return -1;
> +		}
> +	}
> +	if (!fprintf(fp, "\n")) {
> +		fclose(fp);
> +		bisect_clean_state();
> +		return -1;
> +	}

Again, the original writes orig_args which was protected with --sq-quote.

> +	fclose(fp);
> +
> +	return 0;
> +}
> +

  reply	other threads:[~2016-08-02 20:25 UTC|newest]

Thread overview: 320+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-12 22:35 [PATCH 0/9] Resend of gitster/pb/bisect Pranit Bauva
2016-07-12 22:35 ` [PATCH 1/9] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-07-12 22:35 ` [PATCH 2/9] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-07-12 22:35 ` [PATCH 3/9] bisect--helper: `write_terms` " Pranit Bauva
2016-07-12 22:35 ` [PATCH 4/9] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-07-12 22:35 ` [PATCH 5/9] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-07-12 22:35 ` [PATCH 6/9] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-07-12 22:35 ` [PATCH 7/9] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-07-12 22:35 ` [PATCH 8/9] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-07-12 22:35 ` [PATCH 9/9] bisect--helper: `bisect_write` " Pranit Bauva
2016-07-13  7:47 ` [PATCH 0/9] Resend of gitster/pb/bisect Christian Couder
2016-07-20 16:00 ` Pranit Bauva
2016-07-20 21:47 ` [PATCH v10 01/12] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 03/12] bisect--helper: `write_terms` shell function in C Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 04/12] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 06/12] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 07/12] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 12/12] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva
2016-07-22  2:29     ` Torsten Bögershausen
2016-07-22 14:07       ` Pranit Bauva
2016-07-25 16:53         ` Junio C Hamano
2016-07-25 21:28           ` Christian Couder
2016-07-26  1:42           ` Torsten Bögershausen
2016-07-26 17:32             ` Junio C Hamano
2016-07-27  4:20               ` Pranit Bauva
2016-07-27 16:13                 ` Junio C Hamano
2016-07-20 21:47   ` [PATCH v10 10/12] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 02/12] bisect: rewrite `check_term_format` " Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 08/12] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 11/12] bisect--helper: `bisect_next_check` " Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 05/12] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 09/12] bisect--helper: `bisect_write` shell function in C Pranit Bauva
2016-07-31  9:21   ` [RFC/PATCH v11 01/13] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 13/13] bisect--helper: `bisect_start` shell function partially in C Pranit Bauva
2016-08-02 20:19       ` Junio C Hamano [this message]
2016-08-03 20:49         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 11/13] bisect--helper: `bisect_next_check` shell function " Pranit Bauva
2016-08-02 19:17       ` Junio C Hamano
2016-08-03 20:33         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 05/13] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 04/13] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2016-08-02 17:46       ` Junio C Hamano
2016-08-03 20:27         ` Pranit Bauva
2016-08-04 15:45           ` Junio C Hamano
2016-08-04 16:07             ` Pranit Bauva
2016-08-04 16:50               ` Junio C Hamano
2016-08-04 16:57                 ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 07/13] bisect--helper: `bisect_reset` " Pranit Bauva
2016-08-02 18:44       ` Junio C Hamano
2016-07-31  9:21     ` [RFC/PATCH v11 09/13] bisect--helper: `bisect_write` " Pranit Bauva
2016-08-02 20:25       ` Junio C Hamano
2016-08-02 22:17         ` Junio C Hamano
2016-08-03 20:52           ` Pranit Bauva
2016-08-03 20:51         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 10/13] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-08-02 18:53       ` Junio C Hamano
2016-08-03 20:29         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 12/13] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva
2016-08-02 19:22       ` Junio C Hamano
2016-08-03 20:33         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 02/13] bisect: rewrite `check_term_format` " Pranit Bauva
2016-08-02 17:31       ` Junio C Hamano
2016-08-03 20:20         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 08/13] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-08-02 18:46       ` Junio C Hamano
2016-07-31  9:21     ` [RFC/PATCH v11 06/13] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 03/13] bisect--helper: `write_terms` shell function in C Pranit Bauva
2016-08-02 17:38       ` Junio C Hamano
2016-08-03 20:21         ` Pranit Bauva
2016-08-04 15:39           ` Junio C Hamano
2016-08-02 17:25     ` [RFC/PATCH v11 01/13] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Junio C Hamano
2016-08-10 21:57     ` [PATCH v12 " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 11/13] bisect--helper: `bisect_next_check` & bisect_voc shell function in C Pranit Bauva
2016-08-12 18:11         ` Junio C Hamano
2016-08-12 18:49           ` Junio C Hamano
2016-08-13  6:32             ` Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 04/13] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-08-12 19:24         ` Junio C Hamano
2016-08-10 21:57       ` [PATCH v12 06/13] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 02/13] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 12/13] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 08/13] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 09/13] bisect--helper: `bisect_write` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 10/13] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 03/13] bisect--helper: `write_terms` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 13/13] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2016-08-12 19:25         ` Junio C Hamano
2016-08-13  6:33           ` Pranit Bauva
2016-08-13  7:34         ` Christian Couder
2016-08-13 13:50           ` Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 05/13] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 07/13] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-08-10 22:19       ` [PATCH v12 01/13] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-08-19 20:32       ` [PATCH v13 " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 07/13] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 09/13] bisect--helper: `bisect_write` " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 10/13] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 03/13] bisect--helper: `write_terms` " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 05/13] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 04/13] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2016-08-21 11:18           ` Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 02/13] bisect: rewrite `check_term_format` " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 06/13] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 12/13] bisect--helper: `get_terms` & `bisect_terms` shell function in C Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 11/13] bisect--helper: `bisect_next_check` & bisect_voc " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 08/13] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 13/13] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2016-08-21 11:14         ` [PATCH v13 01/13] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2016-08-23 11:53         ` [PATCH v14 01/27] " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 09/27] bisect--helper: `bisect_write` shell function in C Pranit Bauva
2016-08-24 22:30             ` Junio C Hamano
2016-08-27  9:33               ` Pranit Bauva
2016-08-27 21:22                 ` Junio C Hamano
2016-08-30  6:42                   ` Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 23/27] bisect--helper: retire `--bisect-write` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 19/27] bisect--helper: retire `--check-expected-revs` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 18/27] bisect--helper: `bisect_state` & `bisect_head` shell function in C Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 10/27] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 15/27] bisect--helper: retire `--bisect-clean-state` subcommand Pranit Bauva
2016-08-26 20:56             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 14/27] bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C Pranit Bauva
2016-08-25 20:30             ` Junio C Hamano
2016-08-30 18:25               ` Pranit Bauva
2016-08-30 18:44                 ` Pranit Bauva
2016-08-30 19:33                 ` Junio C Hamano
2016-08-30 20:17                   ` Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 26/27] bisect--helper: retire `--bisect-auto-next` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 08/27] bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C Pranit Bauva
2016-08-24 22:13             ` Junio C Hamano
2016-08-27  9:14               ` Pranit Bauva
2016-08-29 17:17                 ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 21/27] bisect--helper: `bisect_log` " Pranit Bauva
2016-08-26 23:07             ` Junio C Hamano
2016-08-27 20:16               ` Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 16/27] bisect--helper: retire `--next-all` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 07/27] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-08-24 21:12             ` Junio C Hamano
2016-08-26 13:46               ` Pranit Bauva
2016-08-26 16:29                 ` Junio C Hamano
2016-08-27 10:52                   ` Pranit Bauva
2016-08-29 17:06                     ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 20/27] bisect--helper: retire `--write-terms` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 04/27] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2016-08-24 20:58             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 22/27] bisect--helper: `bisect_replay` " Pranit Bauva
2016-08-26 23:24             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 17/27] bisect--helper: `bisect_autostart` " Pranit Bauva
2016-08-26 21:09             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 27/27] bisect--helper: remove the dequote in bisect_start() Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 02/27] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 12/27] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva
2016-08-25 18:05             ` Junio C Hamano
2016-08-27  9:48               ` Pranit Bauva
2016-08-29 17:15                 ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 13/27] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2016-08-25 19:02             ` Junio C Hamano
2016-08-25 19:43               ` Junio C Hamano
2016-08-27 19:47               ` Pranit Bauva
2016-08-27 20:53                 ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 06/27] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 11/27] bisect--helper: `bisect_next_check` & bisect_voc shell function in C Pranit Bauva
2016-08-24 22:40             ` Junio C Hamano
2016-08-27  9:35               ` Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 03/27] bisect--helper: `write_terms` " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 24/27] bisect--helper: retire `--check-and-set-terms` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 05/27] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 25/27] bisect--helper: retire `--bisect-autostart` subcommand Pranit Bauva
2016-08-23 20:28           ` [PATCH v14 01/27] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Junio C Hamano
2016-08-23 21:07             ` Pranit Bauva
2016-08-23 21:24           ` Pranit Bauva
2016-10-14 14:14           ` [PATCH v15 " Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 05/27] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 02/27] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-11-14 22:20               ` Stephan Beyer
2016-11-15  5:16                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 03/27] bisect--helper: `write_terms` " Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 09/27] bisect--helper: `bisect_write` " Pranit Bauva
2016-11-17  9:40               ` Stephan Beyer
2016-12-06 21:32                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 15/27] bisect--helper: `bisect_next` and `bisect_auto_next` " Pranit Bauva
2016-11-20 20:01               ` Stephan Beyer
2016-12-31 10:23                 ` Pranit Bauva
2016-11-21 21:35               ` Stephan Beyer
2016-12-31 10:43                 ` Pranit Bauva
2017-01-01 16:27                   ` Stephan Beyer
2017-01-01 17:41                     ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 21/27] bisect--helper: retire `--write-terms` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 23/27] bisect--helper: `bisect_replay` shell function in C Pranit Bauva
2016-11-22  0:49               ` Stephan Beyer
2016-12-06 23:02                 ` Pranit Bauva
2016-12-06 23:20                   ` Stephan Beyer
2016-12-06 23:40                   ` Stephan Beyer
2016-12-07 13:15                     ` Christian Couder
2016-10-14 14:14             ` [PATCH v15 20/27] bisect--helper: retire `--check-expected-revs` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 26/27] bisect--helper: retire `--bisect-auto-next` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 19/27] bisect--helper: `bisect_state` & `bisect_head` shell function in C Pranit Bauva
2016-11-22  0:12               ` Stephan Beyer
2016-12-06 22:40                 ` Pranit Bauva
2016-12-06 23:54                   ` Stephan Beyer
2016-12-08  6:43                     ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 13/27] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2016-11-15 23:19               ` Stephan Beyer
2016-11-16 17:09                 ` Pranit Bauva
2016-11-20 20:01               ` Stephan Beyer
2016-11-20 20:19                 ` Stephan Beyer
2016-10-14 14:14             ` [PATCH v15 25/27] bisect--helper: retire `--bisect-autostart` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 27/27] bisect--helper: remove the dequote in bisect_start() Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 22/27] bisect--helper: `bisect_log` shell function in C Pranit Bauva
2016-11-17 21:47               ` Stephan Beyer
2016-12-06 22:42                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 10/27] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-11-17 20:25               ` Stephan Beyer
2016-12-06 22:43                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 14/27] t6030: no cleanup with bad merge base Pranit Bauva
2016-10-14 21:43               ` Junio C Hamano
2016-10-15  8:46                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 16/27] bisect--helper: retire `--bisect-clean-state` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 17/27] bisect--helper: retire `--next-all` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 07/27] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2016-11-16 23:23               ` Stephan Beyer
2016-11-17  3:56                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 04/27] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-11-15 21:09               ` Stephan Beyer
2016-11-15 21:40                 ` Junio C Hamano
2016-11-15 21:53                   ` Stephan Beyer
2016-11-16 16:49                   ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 06/27] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 11/27] bisect--helper: `bisect_next_check` & bisect_voc shell function in C Pranit Bauva
2016-11-17 20:59               ` Stephan Beyer
2016-12-06 18:39                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 08/27] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2016-11-16 23:47               ` Stephan Beyer
2016-12-06 19:33                 ` Pranit Bauva
2016-12-16 19:00                   ` Pranit Bauva
2016-12-17 19:42                     ` Stephan Beyer
2016-12-16 19:35                 ` Pranit Bauva
2016-12-17 19:55                   ` Stephan Beyer
2016-10-14 14:14             ` [PATCH v15 24/27] bisect--helper: retire `--bisect-write` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 18/27] bisect--helper: `bisect_autostart` shell function in C Pranit Bauva
2016-11-20 20:15               ` Stephan Beyer
2016-12-06 19:47                 ` Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 12/27] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva
2016-11-17 21:32               ` Stephan Beyer
2016-12-06 21:14                 ` Pranit Bauva
2016-12-06 23:05                   ` Stephan Beyer
2016-12-07 12:06                     ` Pranit Bauva
2016-10-14 15:12             ` [PATCH v15 01/27] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Pranit Bauva
2017-09-29  6:49               ` [PATCH v16 1/6] " Pranit Bauva
2017-09-29  6:49                 ` [PATCH v16 4/6] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2017-09-29  6:49                 ` [PATCH v16 5/6] t6030: explicitly test for bisection cleanup Pranit Bauva
2017-09-29  6:49                 ` [PATCH v16 3/6] bisect--helper: `write_terms` shell function in C Pranit Bauva
2017-09-29  6:49                 ` [PATCH v16 2/6] bisect--helper: rewrite `check_term_format` " Pranit Bauva
2017-09-29  6:49                 ` [PATCH v16 6/6] bisect--helper: `is_expected_rev` & `check_expected_revs` " Pranit Bauva
2017-11-19 20:34                   ` Christian Couder
2017-11-20  3:05                     ` Junio C Hamano
2017-11-20  7:03                       ` Christian Couder
2017-09-29 18:54                 ` [PATCH v16 1/6] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Stephan Beyer
2017-09-29 21:10                   ` Pranit Bauva
2017-09-30 12:59                 ` Ramsay Jones
2017-10-02 13:44                   ` Pranit Bauva
2017-10-03  0:48                     ` Ramsay Jones
2017-10-03  3:51                       ` Junio C Hamano
2017-10-03  4:35                         ` Pranit Bauva
2017-10-04  2:22                         ` Ramsay Jones
2017-10-04  4:07                           ` Junio C Hamano
2017-10-27 15:06                 ` [PATCH v16 Part II 1/8] bisect--helper: `bisect_reset` shell function in C Pranit Bauva
2017-10-27 15:06                   ` [PATCH v16 Part II 3/8] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva
2017-10-27 15:06                   ` [PATCH v16 Part II 4/8] bisect--helper: `check_and_set_terms` shell function in C Pranit Bauva
2017-11-08  0:37                     ` Ramsay Jones
2017-10-27 15:06                   ` [PATCH v16 Part II 2/8] bisect--helper: `bisect_write` " Pranit Bauva
2017-10-27 17:28                     ` Martin Ågren
2017-10-30 17:35                       ` Pranit Bauva
2018-11-23 10:13                         ` Johannes Schindelin
2018-11-23 12:22                           ` Martin Ågren
2018-11-26 18:18                             ` Johannes Schindelin
2017-10-27 18:19                     ` Junio C Hamano
2017-10-30 17:38                       ` Pranit Bauva
2017-10-30 13:38                     ` Stephan Beyer
2017-10-30 16:24                       ` Stephan Beyer
2017-11-08  0:26                     ` Ramsay Jones
2017-10-27 15:06                   ` [PATCH v16 Part II 8/8] t6030: make various test to pass GETTEXT_POISON tests Pranit Bauva
2017-10-27 15:06                   ` [PATCH v16 Part II 6/8] bisect--helper: `get_terms` & `bisect_terms` shell function in C Pranit Bauva
2017-10-27 20:04                     ` Martin Ågren
2017-10-30 17:45                       ` Pranit Bauva
2017-10-30 16:34                     ` Stephan Beyer
2017-10-30 17:31                       ` Pranit Bauva
2017-11-08  0:59                     ` Ramsay Jones
2017-10-27 15:06                   ` [PATCH v16 Part II 5/8] bisect--helper: `bisect_next_check` " Pranit Bauva
2017-10-27 17:35                     ` Martin Ågren
2017-10-30 17:40                       ` Pranit Bauva
2017-11-08  0:48                     ` Ramsay Jones
2017-11-12 19:19                     ` Stephan Beyer
2017-11-12 19:27                     ` Stephan Beyer
2017-11-12 20:03                     ` Stephan Beyer
2017-11-13  3:56                       ` Junio C Hamano
2017-10-27 15:06                   ` [PATCH v16 Part II 7/8] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2017-10-30 16:51                     ` Stephan Beyer
2017-10-30 17:28                       ` Pranit Bauva
2018-02-16  1:22                     ` SZEDER Gábor
2017-10-27 15:32                   ` [PATCH v16 Part II 1/8] bisect--helper: `bisect_reset` shell function " Pranit Bauva
2017-10-27 17:40                   ` Junio C Hamano
2017-10-30 17:26                     ` Pranit Bauva
2017-10-30 13:22                   ` Stephan Beyer
2017-10-30 17:27                     ` Pranit Bauva
2017-11-08  0:07                   ` Ramsay Jones
2019-01-02 15:38                   ` [PATCH v17 0/7] git bisect: convert from shell to C Tanushree Tumane via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 1/7] bisect--helper: `bisect_reset` shell function in C Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 2/7] bisect--helper: `bisect_write` " Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 3/7] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 4/7] bisect--helper: `check_and_set_terms` shell function in C Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 5/7] bisect--helper: `bisect_next_check` " Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 6/7] bisect--helper: `get_terms` & `bisect_terms` " Pranit Bauva via GitGitGadget
2019-01-02 15:38                     ` [PATCH v17 7/7] bisect--helper: `bisect_start` shell function partially " Pranit Bauva via GitGitGadget
2019-01-03  1:19                     ` [PATCH v17 0/7] git bisect: convert from shell to C Ramsay Jones
2019-01-07  9:15                       ` TANUSHREE TUMANE
2016-10-27 16:59             ` [PATCH v15 01/27] bisect--helper: use OPT_CMDMODE instead of OPT_BOOL Junio C Hamano
2016-10-27 20:14               ` Christian Couder
2016-10-28  6:02               ` Matthieu Moy
2016-11-15 21:40               ` Stephan Beyer
2016-11-16  0:18                 ` Junio C Hamano

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=xmqqr3a6divf.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=pranit.bauva@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.