All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Pranit Bauva via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
	Pranit Bauva <pranit.bauva@gmail.com>
Subject: [PATCH v17 7/7] bisect--helper: `bisect_start` shell function partially in C
Date: Wed, 02 Jan 2019 07:38:36 -0800 (PST)	[thread overview]
Message-ID: <87a033b858d7e6acba2671339f6bdded03dcdc3a.1546443509.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.101.v17.git.gitgitgadget@gmail.com>

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

Reimplement the `bisect_start` shell function partially in C and add
`bisect-start` subcommand to `git bisect--helper` to call it from
git-bisect.sh .

The last part is not converted because it calls another shell function.
`bisect_start` shell function will be completed after the `bisect_next`
shell function is ported in C.

Using `--bisect-start` subcommand is a temporary measure to port shell
function in C so as to use the existing test suite. As more functions
are ported, this subcommand will be retired and will be called by some
other methods.

Also introduce a method `bisect_append_log_quoted` to keep things short
and crisp.

Note that we are a bit lax about command-line parsing because the helper
is not supposed to be called by the user directly (but only from the git
bisect script).

Helped-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Helped-by: Stephan Beyer <s-beyer@gmx.net>
Mentored-by: Lars Schneider <larsxschneider@gmail.com>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com>
Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com>
---
 builtin/bisect--helper.c | 230 ++++++++++++++++++++++++++++++++++++++-
 git-bisect.sh            | 132 +---------------------
 2 files changed, 230 insertions(+), 132 deletions(-)

diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index d61edd3c91..22e669e3b1 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -7,6 +7,7 @@
 #include "argv-array.h"
 #include "run-command.h"
 #include "prompt.h"
+#include "quote.h"
 
 static GIT_PATH_FUNC(git_path_bisect_terms, "BISECT_TERMS")
 static GIT_PATH_FUNC(git_path_bisect_expected_rev, "BISECT_EXPECTED_REV")
@@ -14,6 +15,8 @@ static GIT_PATH_FUNC(git_path_bisect_ancestors_ok, "BISECT_ANCESTORS_OK")
 static GIT_PATH_FUNC(git_path_bisect_start, "BISECT_START")
 static GIT_PATH_FUNC(git_path_bisect_head, "BISECT_HEAD")
 static GIT_PATH_FUNC(git_path_bisect_log, "BISECT_LOG")
+static GIT_PATH_FUNC(git_path_head_name, "head-name")
+static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
 
 static const char * const git_bisect_helper_usage[] = {
 	N_("git bisect--helper --next-all [--no-checkout]"),
@@ -24,6 +27,8 @@ static const char * const git_bisect_helper_usage[] = {
 	N_("git bisect--helper --bisect-check-and-set-terms <command> <good_term> <bad_term>"),
 	N_("git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"),
 	N_("git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]"),
+	N_("git bisect--helper --bisect-start [--term-{old,good}=<term> --term-{new,bad}=<term>]"
+					     "[--no-checkout] [<bad> [<good>...]] [--] [<paths>...]"),
 	NULL
 };
 
@@ -389,6 +394,219 @@ static int bisect_terms(struct bisect_terms *terms, const char *option)
 	return 0;
 }
 
+static int bisect_append_log_quoted(const char **argv)
+{
+	int retval = 0;
+	FILE *fp = fopen(git_path_bisect_log(), "a");
+	struct strbuf orig_args = STRBUF_INIT;
+
+	if (!fp)
+		return -1;
+
+	if (fprintf(fp, "git bisect start") < 1) {
+		retval = -1;
+		goto finish;
+	}
+
+	sq_quote_argv(&orig_args, argv);
+	if (fprintf(fp, "%s\n", orig_args.buf) < 1)
+		retval = -1;
+
+finish:
+	fclose(fp);
+	strbuf_release(&orig_args);
+	return retval;
+}
+
+static int bisect_start(struct bisect_terms *terms, int no_checkout,
+			const char **argv, int argc)
+{
+	int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
+	int flags, pathspec_pos, retval = 0;
+	struct string_list revs = STRING_LIST_INIT_DUP;
+	struct string_list states = STRING_LIST_INIT_DUP;
+	struct strbuf start_head = STRBUF_INIT;
+	struct strbuf bisect_names = STRBUF_INIT;
+	struct object_id head_oid;
+	struct object_id oid;
+	const char *head;
+
+	if (is_bare_repository())
+		no_checkout = 1;
+
+	/*
+	 * Check for one bad and then some good revisions
+	 */
+	for (i = 0; i < argc; i++) {
+		if (!strcmp(argv[i], "--")) {
+			has_double_dash = 1;
+			break;
+		}
+	}
+
+	for (i = 0; i < argc; i++) {
+		const char *arg = argv[i];
+		if (!strcmp(argv[i], "--")) {
+			break;
+		} else if (!strcmp(arg, "--no-checkout")) {
+			no_checkout = 1;
+		} else if (!strcmp(arg, "--term-good") ||
+			 !strcmp(arg, "--term-old")) {
+			must_write_terms = 1;
+			free((void *) terms->term_good);
+			terms->term_good = xstrdup(argv[++i]);
+		} else if (skip_prefix(arg, "--term-good=", &arg) ||
+			   skip_prefix(arg, "--term-old=", &arg)) {
+			must_write_terms = 1;
+			free((void *) terms->term_good);
+			terms->term_good = xstrdup(arg);
+		} else if (!strcmp(arg, "--term-bad") ||
+			 !strcmp(arg, "--term-new")) {
+			must_write_terms = 1;
+			free((void *) terms->term_bad);
+			terms->term_bad = xstrdup(argv[++i]);
+		} else if (skip_prefix(arg, "--term-bad=", &arg) ||
+			   skip_prefix(arg, "--term-new=", &arg)) {
+			must_write_terms = 1;
+			free((void *) terms->term_bad);
+			terms->term_bad = xstrdup(arg);
+		} else if (starts_with(arg, "--") &&
+			 !one_of(arg, "--term-good", "--term-bad", NULL)) {
+			return error(_("unrecognized option: '%s'"), arg);
+		} else {
+			char *commit_id = xstrfmt("%s^{commit}", arg);
+			if (get_oid(commit_id, &oid) && has_double_dash)
+				die(_("'%s' does not appear to be a valid "
+				      "revision"), arg);
+
+			string_list_append(&revs, oid_to_hex(&oid));
+			free(commit_id);
+		}
+	}
+	pathspec_pos = i;
+
+	/*
+	 * 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.
+	 */
+	if (revs.nr)
+		must_write_terms = 1;
+	for (i = 0; i < revs.nr; i++) {
+		if (bad_seen) {
+			string_list_append(&states, terms->term_good);
+		} else {
+			bad_seen = 1;
+			string_list_append(&states, terms->term_bad);
+		}
+	}
+
+	/*
+	 * Verify HEAD
+	 */
+	head = resolve_ref_unsafe("HEAD", 0, &head_oid, &flags);
+	if (!head)
+		if (get_oid("HEAD", &head_oid))
+			return error(_("bad HEAD - I need a HEAD"));
+
+	/*
+	 * Check if we are bisecting
+	 */
+	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)) {
+				retval = error(_("checking out '%s' failed."
+						 " Try 'git bisect start "
+						 "<valid-branch>'."),
+					       start_head.buf);
+				goto finish;
+			}
+		}
+	} else {
+		/* Get the rev from where we start. */
+		if (!get_oid(head, &head_oid) &&
+		    !starts_with(head, "refs/heads/")) {
+			strbuf_reset(&start_head);
+			strbuf_addstr(&start_head, oid_to_hex(&head_oid));
+		} else if (!get_oid(head, &head_oid) &&
+			   skip_prefix(head, "refs/heads/", &head)) {
+			/*
+			 * 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()))
+				return error(_("won't bisect on cg-seek'ed tree"));
+			strbuf_addstr(&start_head, head);
+		} else {
+			return error(_("bad HEAD - strange symbolic ref"));
+		}
+	}
+
+	/*
+	 * Get rid of any old bisect state.
+	 */
+	if (bisect_clean_state())
+		return -1;
+
+	/*
+	 * In case of mistaken revs or checkout error, or signals received,
+	 * "bisect_auto_next" below may exit or misbehave.
+	 * We have to trap this to be able to clean up using
+	 * "bisect_clean_state".
+	 */
+
+	/*
+	 * Write new start state
+	 */
+	write_file(git_path_bisect_start(), "%s\n", start_head.buf);
+
+	if (no_checkout) {
+		get_oid(start_head.buf, &oid);
+		if (update_ref(NULL, "BISECT_HEAD", &oid, NULL, 0,
+			       UPDATE_REFS_MSG_ON_ERR)) {
+			retval = -1;
+			goto finish;
+		}
+	}
+
+	if (pathspec_pos < argc - 1)
+		sq_quote_argv(&bisect_names, argv + pathspec_pos);
+	write_file(git_path_bisect_names(), "%s\n", bisect_names.buf);
+
+	for (i = 0; i < states.nr; i++)
+		if (bisect_write(states.items[i].string,
+				 revs.items[i].string, terms, 1)) {
+			retval = -1;
+			goto finish;
+		}
+
+	if (must_write_terms && write_terms(terms->term_bad,
+					    terms->term_good)) {
+		retval = -1;
+		goto finish;
+	}
+
+	retval = bisect_append_log_quoted(argv);
+	if (retval)
+		retval = -1;
+
+finish:
+	string_list_clear(&revs, 0);
+	string_list_clear(&states, 0);
+	strbuf_release(&start_head);
+	strbuf_release(&bisect_names);
+	return retval;
+}
+
 int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 {
 	enum {
@@ -400,7 +618,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 		BISECT_WRITE,
 		CHECK_AND_SET_TERMS,
 		BISECT_NEXT_CHECK,
-		BISECT_TERMS
+		BISECT_TERMS,
+		BISECT_START
 	} cmdmode = 0;
 	int no_checkout = 0, res = 0, nolog = 0;
 	struct option options[] = {
@@ -422,6 +641,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 			 N_("check whether bad or good terms exist"), BISECT_NEXT_CHECK),
 		OPT_CMDMODE(0, "bisect-terms", &cmdmode,
 			 N_("print out the bisect terms"), BISECT_TERMS),
+		OPT_CMDMODE(0, "bisect-start", &cmdmode,
+			 N_("start the bisect session"), BISECT_START),
 		OPT_BOOL(0, "no-checkout", &no_checkout,
 			 N_("update BISECT_HEAD instead of checking out the current commit")),
 		OPT_BOOL(0, "no-log", &nolog,
@@ -431,7 +652,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 	struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
 
 	argc = parse_options(argc, argv, prefix, options,
-			     git_bisect_helper_usage, PARSE_OPT_KEEP_UNKNOWN);
+			     git_bisect_helper_usage,
+			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN);
 
 	if (!cmdmode)
 		usage_with_options(git_bisect_helper_usage, options);
@@ -477,6 +699,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 			return error(_("--bisect-terms requires 0 or 1 argument"));
 		res = bisect_terms(&terms, argc == 1 ? argv[0] : NULL);
 		break;
+	case BISECT_START:
+		set_terms(&terms, "bad", "good");
+		res = bisect_start(&terms, no_checkout, argv, argc);
+		break;
 	default:
 		return error("BUG: unknown subcommand '%d'", cmdmode);
 	}
diff --git a/git-bisect.sh b/git-bisect.sh
index bdb614e3c2..efee12b8b1 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -71,122 +71,7 @@ bisect_autostart() {
 }
 
 bisect_start() {
-	#
-	# Check for one bad and then some good revisions.
-	#
-	has_double_dash=0
-	for arg; do
-		case "$arg" in --) has_double_dash=1; break ;; esac
-	done
-	orig_args=$(git rev-parse --sq-quote "$@")
-	bad_seen=0
-	eval=''
-	must_write_terms=0
-	revs=''
-	if test "z$(git rev-parse --is-bare-repository)" != zfalse
-	then
-		mode=--no-checkout
-	else
-		mode=''
-	fi
-	while [ $# -gt 0 ]; do
-		arg="$1"
-		case "$arg" in
-		--)
-			shift
-			break
-		;;
-		--no-checkout)
-			mode=--no-checkout
-			shift ;;
-		--term-good|--term-old)
-			shift
-			must_write_terms=1
-			TERM_GOOD=$1
-			shift ;;
-		--term-good=*|--term-old=*)
-			must_write_terms=1
-			TERM_GOOD=${1#*=}
-			shift ;;
-		--term-bad|--term-new)
-			shift
-			must_write_terms=1
-			TERM_BAD=$1
-			shift ;;
-		--term-bad=*|--term-new=*)
-			must_write_terms=1
-			TERM_BAD=${1#*=}
-			shift ;;
-		--*)
-			die "$(eval_gettext "unrecognised option: '\$arg'")" ;;
-		*)
-			rev=$(git rev-parse -q --verify "$arg^{commit}") || {
-				test $has_double_dash -eq 1 &&
-				die "$(eval_gettext "'\$arg' does not appear to be a valid revision")"
-				break
-			}
-			revs="$revs $rev"
-			shift
-			;;
-		esac
-	done
-
-	for rev in $revs
-	do
-		# 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
-
-		case $bad_seen in
-		0) state=$TERM_BAD ; bad_seen=1 ;;
-		*) state=$TERM_GOOD ;;
-		esac
-		eval="$eval git bisect--helper --bisect-write '$state' '$rev' '$TERM_GOOD' '$TERM_BAD' 'nolog' &&"
-	done
-	#
-	# Verify HEAD.
-	#
-	head=$(GIT_DIR="$GIT_DIR" git symbolic-ref -q HEAD) ||
-	head=$(GIT_DIR="$GIT_DIR" git rev-parse --verify HEAD) ||
-	die "$(gettext "Bad HEAD - I need a HEAD")"
-
-	#
-	# Check if we are bisecting.
-	#
-	start_head=''
-	if test -s "$GIT_DIR/BISECT_START"
-	then
-		# Reset to the rev from where we started.
-		start_head=$(cat "$GIT_DIR/BISECT_START")
-		if test "z$mode" != "z--no-checkout"
-		then
-			git checkout "$start_head" -- ||
-			die "$(eval_gettext "Checking out '\$start_head' failed. Try 'git bisect reset <valid-branch>'.")"
-		fi
-	else
-		# Get rev from where we start.
-		case "$head" in
-		refs/heads/*|$_x40)
-			# This error message should only be triggered by
-			# cogito usage, and cogito users should understand
-			# it relates to cg-seek.
-			[ -s "$GIT_DIR/head-name" ] &&
-				die "$(gettext "won't bisect on cg-seek'ed tree")"
-			start_head="${head#refs/heads/}"
-			;;
-		*)
-			die "$(gettext "Bad HEAD - strange symbolic ref")"
-			;;
-		esac
-	fi
-
-	#
-	# Get rid of any old bisect state.
-	#
-	git bisect--helper --bisect-clean-state || exit
+	git bisect--helper --bisect-start $@ || exit
 
 	#
 	# Change state.
@@ -198,23 +83,10 @@ bisect_start() {
 	trap 'git bisect--helper --bisect-clean-state' 0
 	trap 'exit 255' 1 2 3 15
 
-	#
-	# Write new start state.
-	#
-	echo "$start_head" >"$GIT_DIR/BISECT_START" && {
-		test "z$mode" != "z--no-checkout" ||
-		git update-ref --no-deref BISECT_HEAD "$start_head"
-	} &&
-	git rev-parse --sq-quote "$@" >"$GIT_DIR/BISECT_NAMES" &&
-	eval "$eval true" &&
-	if test $must_write_terms -eq 1
-	then
-		git bisect--helper --write-terms "$TERM_BAD" "$TERM_GOOD" || exit
-	fi &&
-	echo "git bisect start$orig_args" >>"$GIT_DIR/BISECT_LOG" || exit
 	#
 	# Check if we can proceed to the next bisect state.
 	#
+	get_terms
 	bisect_auto_next
 
 	trap '-' 0
-- 
gitgitgadget

  parent reply	other threads:[~2019-01-02 15:38 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 04/12] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 03/12] bisect--helper: `write_terms` " 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 02/12] bisect: rewrite `check_term_format` shell function in C Pranit Bauva
2016-07-20 21:47   ` [PATCH v10 07/12] bisect--helper: `bisect_reset` " 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 09/12] bisect--helper: `bisect_write` " 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 06/12] wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() 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
2016-08-03 20:49         ` Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 02/13] bisect: rewrite `check_term_format` shell function " 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 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 05/13] t6030: explicitly test for bisection cleanup Pranit Bauva
2016-07-31  9:21     ` [RFC/PATCH v11 11/13] bisect--helper: `bisect_next_check` shell function in C 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 04/13] bisect--helper: `bisect_clean_state` " 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 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-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 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 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 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-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 09/13] bisect--helper: `bisect_write` shell function in C 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 10/13] bisect--helper: `check_and_set_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 02/13] bisect: rewrite `check_term_format` shell function " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 11/13] bisect--helper: `bisect_next_check` & bisect_voc " 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 07/13] bisect--helper: `bisect_reset` " Pranit Bauva
2016-08-10 21:57       ` [PATCH v12 03/13] bisect--helper: `write_terms` " 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 05/13] t6030: explicitly test for bisection cleanup Pranit Bauva
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 04/13] bisect--helper: `bisect_clean_state` shell function in C Pranit Bauva
2016-08-12 19:24         ` Junio C Hamano
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 03/13] bisect--helper: `write_terms` shell function in C Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 13/13] bisect--helper: `bisect_start` shell function partially " Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 02/13] bisect: rewrite `check_term_format` shell function " 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 05/13] t6030: explicitly test for bisection cleanup 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 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 11/13] bisect--helper: `bisect_next_check` & bisect_voc 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 04/13] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-08-21 11:18           ` Pranit Bauva
2016-08-19 20:32         ` [PATCH v13 07/13] bisect--helper: `bisect_reset` " 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 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 09/27] bisect--helper: `bisect_write` " 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 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 11/27] bisect--helper: `bisect_next_check` & bisect_voc shell function " Pranit Bauva
2016-08-24 22:40             ` Junio C Hamano
2016-08-27  9:35               ` 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 05/27] t6030: explicitly test for bisection cleanup Pranit Bauva
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 20/27] bisect--helper: retire `--write-terms` subcommand 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 19/27] bisect--helper: retire `--check-expected-revs` subcommand Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 17/27] bisect--helper: `bisect_autostart` shell function in C Pranit Bauva
2016-08-26 21:09             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 25/27] bisect--helper: retire `--bisect-autostart` subcommand 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 27/27] bisect--helper: remove the dequote in bisect_start() 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 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 03/27] bisect--helper: `write_terms` " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 14/27] bisect--helper: `bisect_next` and `bisect_auto_next` " 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 10/27] bisect--helper: `check_and_set_terms` " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 18/27] bisect--helper: `bisect_state` & `bisect_head` " Pranit Bauva
2016-08-23 11:53           ` [PATCH v14 04/27] bisect--helper: `bisect_clean_state` " Pranit Bauva
2016-08-24 20:58             ` Junio C Hamano
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 22/27] bisect--helper: `bisect_replay` shell function in C Pranit Bauva
2016-08-26 23:24             ` Junio C Hamano
2016-08-23 11:53           ` [PATCH v14 07/27] bisect--helper: `bisect_reset` " 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 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 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 27/27] bisect--helper: remove the dequote in bisect_start() Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 25/27] bisect--helper: retire `--bisect-autostart` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 09/27] bisect--helper: `bisect_write` shell function in C Pranit Bauva
2016-11-17  9:40               ` Stephan Beyer
2016-12-06 21:32                 ` 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 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 22/27] bisect--helper: `bisect_log` " Pranit Bauva
2016-11-17 21:47               ` Stephan Beyer
2016-12-06 22:42                 ` 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 10/27] bisect--helper: `check_and_set_terms` shell function " Pranit Bauva
2016-11-17 20:25               ` Stephan Beyer
2016-12-06 22:43                 ` 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 14:14             ` [PATCH v15 23/27] bisect--helper: `bisect_replay` " 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 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 17/27] bisect--helper: retire `--next-all` 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 24/27] bisect--helper: retire `--bisect-write` subcommand 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 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 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 21/27] bisect--helper: retire `--write-terms` subcommand Pranit Bauva
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 16/27] bisect--helper: retire `--bisect-clean-state` subcommand Pranit Bauva
2016-10-14 14:14             ` [PATCH v15 15/27] bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C 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 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 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 4/6] bisect--helper: `bisect_clean_state` " 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 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:06                   ` [PATCH v16 Part II 6/8] bisect--helper: `get_terms` & `bisect_terms` shell function " 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 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 2/8] bisect--helper: `bisect_write` shell function in C 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 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 8/8] t6030: make various test to pass GETTEXT_POISON tests 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:32                   ` [PATCH v16 Part II 1/8] bisect--helper: `bisect_reset` " 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                     ` Pranit Bauva via GitGitGadget [this message]
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=87a033b858d7e6acba2671339f6bdded03dcdc3a.1546443509.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --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.