bisect--helper: move all subcommands into their own functions
In a later change, we will use OPT_SUBCOMMAND to parse sub-commands to avoid consuming non-option opts. Since OPT_SUBCOMMAND needs a function pointer to operate, let's move it now. Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
parent
58786d73ba
commit
464ce0aba8
@ -1277,6 +1277,117 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__reset(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
if (argc > 1)
|
||||||
|
return error(_("--bisect-reset requires either no argument or a commit"));
|
||||||
|
return bisect_reset(argc ? argv[0] : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__terms(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
if (argc > 1)
|
||||||
|
return error(_("--bisect-terms requires 0 or 1 argument"));
|
||||||
|
res = bisect_terms(&terms, argc == 1 ? argv[0] : NULL);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__start(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
set_terms(&terms, "bad", "good");
|
||||||
|
res = bisect_start(&terms, argv, argc);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__next(int argc, const char **argv UNUSED, const char *prefix)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
if (argc)
|
||||||
|
return error(_("--bisect-next requires 0 arguments"));
|
||||||
|
get_terms(&terms);
|
||||||
|
res = bisect_next(&terms, prefix);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__state(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
set_terms(&terms, "bad", "good");
|
||||||
|
get_terms(&terms);
|
||||||
|
res = bisect_state(&terms, argv, argc);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__log(int argc, const char **argv UNUSED, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
if (argc)
|
||||||
|
return error(_("--bisect-log requires 0 arguments"));
|
||||||
|
return bisect_log();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__replay(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
if (argc != 1)
|
||||||
|
return error(_("no logfile given"));
|
||||||
|
set_terms(&terms, "bad", "good");
|
||||||
|
res = bisect_replay(&terms, argv[0]);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__skip(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
set_terms(&terms, "bad", "good");
|
||||||
|
get_terms(&terms);
|
||||||
|
res = bisect_skip(&terms, argv, argc);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__visualize(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
get_terms(&terms);
|
||||||
|
res = bisect_visualize(&terms, argv, argc);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_bisect__run(int argc, const char **argv, const char *prefix UNUSED)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct bisect_terms terms = { 0 };
|
||||||
|
|
||||||
|
if (!argc)
|
||||||
|
return error(_("bisect run failed: no command provided."));
|
||||||
|
get_terms(&terms);
|
||||||
|
res = bisect_run(&terms, argv, argc);
|
||||||
|
free_terms(&terms);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
@ -1316,8 +1427,6 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
N_("use <cmd>... to automatically bisect"), BISECT_RUN),
|
N_("use <cmd>... to automatically bisect"), BISECT_RUN),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
|
|
||||||
|
|
||||||
argc = parse_options(argc, argv, prefix, options,
|
argc = parse_options(argc, argv, prefix, options,
|
||||||
git_bisect_helper_usage,
|
git_bisect_helper_usage,
|
||||||
PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN_OPT);
|
PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN_OPT);
|
||||||
@ -1327,60 +1436,38 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
switch (cmdmode) {
|
switch (cmdmode) {
|
||||||
case BISECT_RESET:
|
case BISECT_RESET:
|
||||||
if (argc > 1)
|
res = cmd_bisect__reset(argc, argv, prefix);
|
||||||
return error(_("--bisect-reset requires either no argument or a commit"));
|
|
||||||
res = bisect_reset(argc ? argv[0] : NULL);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_TERMS:
|
case BISECT_TERMS:
|
||||||
if (argc > 1)
|
res = cmd_bisect__terms(argc, argv, prefix);
|
||||||
return error(_("--bisect-terms requires 0 or 1 argument"));
|
|
||||||
res = bisect_terms(&terms, argc == 1 ? argv[0] : NULL);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_START:
|
case BISECT_START:
|
||||||
set_terms(&terms, "bad", "good");
|
res = cmd_bisect__start(argc, argv, prefix);
|
||||||
res = bisect_start(&terms, argv, argc);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_NEXT:
|
case BISECT_NEXT:
|
||||||
if (argc)
|
res = cmd_bisect__next(argc, argv, prefix);
|
||||||
return error(_("--bisect-next requires 0 arguments"));
|
|
||||||
get_terms(&terms);
|
|
||||||
res = bisect_next(&terms, prefix);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_STATE:
|
case BISECT_STATE:
|
||||||
set_terms(&terms, "bad", "good");
|
res = cmd_bisect__state(argc, argv, prefix);
|
||||||
get_terms(&terms);
|
|
||||||
res = bisect_state(&terms, argv, argc);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_LOG:
|
case BISECT_LOG:
|
||||||
if (argc)
|
res = cmd_bisect__log(argc, argv, prefix);
|
||||||
return error(_("--bisect-log requires 0 arguments"));
|
|
||||||
res = bisect_log();
|
|
||||||
break;
|
break;
|
||||||
case BISECT_REPLAY:
|
case BISECT_REPLAY:
|
||||||
if (argc != 1)
|
res = cmd_bisect__replay(argc, argv, prefix);
|
||||||
return error(_("no logfile given"));
|
|
||||||
set_terms(&terms, "bad", "good");
|
|
||||||
res = bisect_replay(&terms, argv[0]);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_SKIP:
|
case BISECT_SKIP:
|
||||||
set_terms(&terms, "bad", "good");
|
res = cmd_bisect__skip(argc, argv, prefix);
|
||||||
get_terms(&terms);
|
|
||||||
res = bisect_skip(&terms, argv, argc);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_VISUALIZE:
|
case BISECT_VISUALIZE:
|
||||||
get_terms(&terms);
|
res = cmd_bisect__visualize(argc, argv, prefix);
|
||||||
res = bisect_visualize(&terms, argv, argc);
|
|
||||||
break;
|
break;
|
||||||
case BISECT_RUN:
|
case BISECT_RUN:
|
||||||
if (!argc)
|
res = cmd_bisect__run(argc, argv, prefix);
|
||||||
return error(_("bisect run failed: no command provided."));
|
|
||||||
get_terms(&terms);
|
|
||||||
res = bisect_run(&terms, argv, argc);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
BUG("unknown subcommand %d", cmdmode);
|
BUG("unknown subcommand %d", cmdmode);
|
||||||
}
|
}
|
||||||
free_terms(&terms);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle early success
|
* Handle early success
|
||||||
|
Loading…
Reference in New Issue
Block a user