cmd_bisect__helper: defer parsing no-checkout flag
cmd_bisect__helper() is intended as a temporary shim layer serving as an interface for git-bisect.sh. This function and git-bisect.sh should eventually be replaced by a C implementation, cmd_bisect(), serving as an entrypoint for all "git bisect ..." shell commands: cmd_bisect() will only parse the first token following "git bisect", and dispatch the remaining args to the appropriate function ["bisect_start()", "bisect_next()", etc.]. Thus, cmd_bisect__helper() should not be responsible for parsing flags like --no-checkout. Instead, let the --no-checkout flag remain in the argv array, so it may be evaluated alongside the other options already parsed by bisect_start(). Signed-off-by: Aaron Lipman <alipman88@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0fe305a5d3
commit
be5fe2000d
3
bisect.c
3
bisect.c
@ -989,7 +989,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good)
|
|||||||
* If no_checkout is non-zero, the bisection process does not
|
* If no_checkout is non-zero, the bisection process does not
|
||||||
* checkout the trial commit but instead simply updates BISECT_HEAD.
|
* checkout the trial commit but instead simply updates BISECT_HEAD.
|
||||||
*/
|
*/
|
||||||
enum bisect_error bisect_next_all(struct repository *r, const char *prefix, int no_checkout)
|
enum bisect_error bisect_next_all(struct repository *r, const char *prefix)
|
||||||
{
|
{
|
||||||
struct rev_info revs;
|
struct rev_info revs;
|
||||||
struct commit_list *tried;
|
struct commit_list *tried;
|
||||||
@ -997,6 +997,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix, int
|
|||||||
enum bisect_error res = BISECT_OK;
|
enum bisect_error res = BISECT_OK;
|
||||||
struct object_id *bisect_rev;
|
struct object_id *bisect_rev;
|
||||||
char *steps_msg;
|
char *steps_msg;
|
||||||
|
int no_checkout = ref_exists("BISECT_HEAD");
|
||||||
int first_parent_only = 0; /* TODO: pass --first-parent flag from git bisect start */
|
int first_parent_only = 0; /* TODO: pass --first-parent flag from git bisect start */
|
||||||
|
|
||||||
read_bisect_terms(&term_bad, &term_good);
|
read_bisect_terms(&term_bad, &term_good);
|
||||||
|
4
bisect.h
4
bisect.h
@ -58,9 +58,7 @@ enum bisect_error {
|
|||||||
BISECT_INTERNAL_SUCCESS_MERGE_BASE = -11
|
BISECT_INTERNAL_SUCCESS_MERGE_BASE = -11
|
||||||
};
|
};
|
||||||
|
|
||||||
enum bisect_error bisect_next_all(struct repository *r,
|
enum bisect_error bisect_next_all(struct repository *r, const char *prefix);
|
||||||
const char *prefix,
|
|
||||||
int no_checkout);
|
|
||||||
|
|
||||||
int estimate_bisect_steps(int all);
|
int estimate_bisect_steps(int all);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ static GIT_PATH_FUNC(git_path_head_name, "head-name")
|
|||||||
static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
|
static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
|
||||||
|
|
||||||
static const char * const git_bisect_helper_usage[] = {
|
static const char * const git_bisect_helper_usage[] = {
|
||||||
N_("git bisect--helper --next-all [--no-checkout]"),
|
N_("git bisect--helper --next-all"),
|
||||||
N_("git bisect--helper --write-terms <bad_term> <good_term>"),
|
N_("git bisect--helper --write-terms <bad_term> <good_term>"),
|
||||||
N_("git bisect--helper --bisect-clean-state"),
|
N_("git bisect--helper --bisect-clean-state"),
|
||||||
N_("git bisect--helper --bisect-reset [<commit>]"),
|
N_("git bisect--helper --bisect-reset [<commit>]"),
|
||||||
@ -421,9 +421,9 @@ finish:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bisect_start(struct bisect_terms *terms, int no_checkout,
|
static int bisect_start(struct bisect_terms *terms, const char **argv, int argc)
|
||||||
const char **argv, int argc)
|
|
||||||
{
|
{
|
||||||
|
int no_checkout = 0;
|
||||||
int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
|
int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
|
||||||
int flags, pathspec_pos, res = 0;
|
int flags, pathspec_pos, res = 0;
|
||||||
struct string_list revs = STRING_LIST_INIT_DUP;
|
struct string_list revs = STRING_LIST_INIT_DUP;
|
||||||
@ -632,7 +632,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
BISECT_TERMS,
|
BISECT_TERMS,
|
||||||
BISECT_START
|
BISECT_START
|
||||||
} cmdmode = 0;
|
} cmdmode = 0;
|
||||||
int no_checkout = 0, res = 0, nolog = 0;
|
int res = 0, nolog = 0;
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
OPT_CMDMODE(0, "next-all", &cmdmode,
|
OPT_CMDMODE(0, "next-all", &cmdmode,
|
||||||
N_("perform 'git bisect next'"), NEXT_ALL),
|
N_("perform 'git bisect next'"), NEXT_ALL),
|
||||||
@ -654,8 +654,6 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
N_("print out the bisect terms"), BISECT_TERMS),
|
N_("print out the bisect terms"), BISECT_TERMS),
|
||||||
OPT_CMDMODE(0, "bisect-start", &cmdmode,
|
OPT_CMDMODE(0, "bisect-start", &cmdmode,
|
||||||
N_("start the bisect session"), BISECT_START),
|
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,
|
OPT_BOOL(0, "no-log", &nolog,
|
||||||
N_("no log for BISECT_WRITE")),
|
N_("no log for BISECT_WRITE")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
@ -671,7 +669,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
switch (cmdmode) {
|
switch (cmdmode) {
|
||||||
case NEXT_ALL:
|
case NEXT_ALL:
|
||||||
res = bisect_next_all(the_repository, prefix, no_checkout);
|
res = bisect_next_all(the_repository, prefix);
|
||||||
break;
|
break;
|
||||||
case WRITE_TERMS:
|
case WRITE_TERMS:
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
@ -713,7 +711,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
break;
|
break;
|
||||||
case BISECT_START:
|
case BISECT_START:
|
||||||
set_terms(&terms, "bad", "good");
|
set_terms(&terms, "bad", "good");
|
||||||
res = bisect_start(&terms, no_checkout, argv, argc);
|
res = bisect_start(&terms, argv, argc);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return error("BUG: unknown subcommand '%d'", cmdmode);
|
return error("BUG: unknown subcommand '%d'", cmdmode);
|
||||||
|
@ -153,7 +153,7 @@ bisect_next() {
|
|||||||
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD $TERM_GOOD|| exit
|
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD $TERM_GOOD|| exit
|
||||||
|
|
||||||
# Perform all bisection computation, display and checkout
|
# Perform all bisection computation, display and checkout
|
||||||
git bisect--helper --next-all $(test -f "$GIT_DIR/BISECT_HEAD" && echo --no-checkout)
|
git bisect--helper --next-all
|
||||||
res=$?
|
res=$?
|
||||||
|
|
||||||
# Check if we should exit because bisection is finished
|
# Check if we should exit because bisection is finished
|
||||||
|
Loading…
Reference in New Issue
Block a user