Merge branch 'dk/help-all'
"git cmd --help-all" now works outside repositories. * dk/help-all: builtin: also setup gently for --help-all parse-options: refactor flags for usage_with_options_internal
This commit is contained in:
@@ -38,7 +38,8 @@ int cmd_merge_recursive(int argc,
|
|||||||
if (argv[0] && ends_with(argv[0], "-subtree"))
|
if (argv[0] && ends_with(argv[0], "-subtree"))
|
||||||
o.subtree_shift = "";
|
o.subtree_shift = "";
|
||||||
|
|
||||||
if (argc == 2 && !strcmp(argv[1], "-h")) {
|
if (argc == 2 && (!strcmp(argv[1], "-h") ||
|
||||||
|
!strcmp(argv[1], "--help-all"))) {
|
||||||
struct strbuf msg = STRBUF_INIT;
|
struct strbuf msg = STRBUF_INIT;
|
||||||
strbuf_addf(&msg, builtin_merge_recursive_usage, argv[0]);
|
strbuf_addf(&msg, builtin_merge_recursive_usage, argv[0]);
|
||||||
show_usage_if_asked(argc, argv, msg.buf);
|
show_usage_if_asked(argc, argv, msg.buf);
|
||||||
|
|||||||
2
git.c
2
git.c
@@ -445,7 +445,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv, struct
|
|||||||
const char *prefix;
|
const char *prefix;
|
||||||
int run_setup = (p->option & (RUN_SETUP | RUN_SETUP_GENTLY));
|
int run_setup = (p->option & (RUN_SETUP | RUN_SETUP_GENTLY));
|
||||||
|
|
||||||
help = argc == 2 && !strcmp(argv[1], "-h");
|
help = argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help-all"));
|
||||||
if (help && (run_setup & RUN_SETUP))
|
if (help && (run_setup & RUN_SETUP))
|
||||||
/* demote to GENTLY to allow 'git cmd -h' outside repo */
|
/* demote to GENTLY to allow 'git cmd -h' outside repo */
|
||||||
run_setup = RUN_SETUP_GENTLY;
|
run_setup = RUN_SETUP_GENTLY;
|
||||||
|
|||||||
@@ -953,10 +953,16 @@ static void free_preprocessed_options(struct option *options)
|
|||||||
free(options);
|
free(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USAGE_NORMAL 0
|
||||||
|
#define USAGE_FULL 1
|
||||||
|
#define USAGE_TO_STDOUT 0
|
||||||
|
#define USAGE_TO_STDERR 1
|
||||||
|
|
||||||
static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *,
|
static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *,
|
||||||
const char * const *,
|
const char * const *,
|
||||||
const struct option *,
|
const struct option *,
|
||||||
int, int);
|
int full_usage,
|
||||||
|
int usage_to_stderr);
|
||||||
|
|
||||||
enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
|
enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
|
||||||
const struct option *options,
|
const struct option *options,
|
||||||
@@ -1088,7 +1094,8 @@ enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (internal_help && !strcmp(arg + 2, "help-all"))
|
if (internal_help && !strcmp(arg + 2, "help-all"))
|
||||||
return usage_with_options_internal(ctx, usagestr, options, 1, 0);
|
return usage_with_options_internal(ctx, usagestr, options,
|
||||||
|
USAGE_FULL, USAGE_TO_STDOUT);
|
||||||
if (internal_help && !strcmp(arg + 2, "help"))
|
if (internal_help && !strcmp(arg + 2, "help"))
|
||||||
goto show_usage;
|
goto show_usage;
|
||||||
switch (parse_long_opt(ctx, arg + 2, options)) {
|
switch (parse_long_opt(ctx, arg + 2, options)) {
|
||||||
@@ -1129,7 +1136,8 @@ unknown:
|
|||||||
return PARSE_OPT_DONE;
|
return PARSE_OPT_DONE;
|
||||||
|
|
||||||
show_usage:
|
show_usage:
|
||||||
return usage_with_options_internal(ctx, usagestr, options, 0, 0);
|
return usage_with_options_internal(ctx, usagestr, options,
|
||||||
|
USAGE_NORMAL, USAGE_TO_STDOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
int parse_options_end(struct parse_opt_ctx_t *ctx)
|
int parse_options_end(struct parse_opt_ctx_t *ctx)
|
||||||
@@ -1444,7 +1452,8 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
|
|||||||
void NORETURN usage_with_options(const char * const *usagestr,
|
void NORETURN usage_with_options(const char * const *usagestr,
|
||||||
const struct option *opts)
|
const struct option *opts)
|
||||||
{
|
{
|
||||||
usage_with_options_internal(NULL, usagestr, opts, 0, 1);
|
usage_with_options_internal(NULL, usagestr, opts,
|
||||||
|
USAGE_NORMAL, USAGE_TO_STDERR);
|
||||||
exit(129);
|
exit(129);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1452,9 +1461,16 @@ void show_usage_with_options_if_asked(int ac, const char **av,
|
|||||||
const char * const *usagestr,
|
const char * const *usagestr,
|
||||||
const struct option *opts)
|
const struct option *opts)
|
||||||
{
|
{
|
||||||
if (ac == 2 && !strcmp(av[1], "-h")) {
|
if (ac == 2) {
|
||||||
usage_with_options_internal(NULL, usagestr, opts, 0, 0);
|
if (!strcmp(av[1], "-h")) {
|
||||||
exit(129);
|
usage_with_options_internal(NULL, usagestr, opts,
|
||||||
|
USAGE_NORMAL, USAGE_TO_STDOUT);
|
||||||
|
exit(129);
|
||||||
|
} else if (!strcmp(av[1], "--help-all")) {
|
||||||
|
usage_with_options_internal(NULL, usagestr, opts,
|
||||||
|
USAGE_FULL, USAGE_TO_STDOUT);
|
||||||
|
exit(129);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,6 +133,10 @@ do
|
|||||||
test_expect_code 129 nongit git $cmd -h >usage &&
|
test_expect_code 129 nongit git $cmd -h >usage &&
|
||||||
test_grep "[Uu]sage: git $cmd " usage
|
test_grep "[Uu]sage: git $cmd " usage
|
||||||
'
|
'
|
||||||
|
test_$expect_outcome $prereq "'git $cmd --help-all' outside a repository" '
|
||||||
|
test_expect_code 129 nongit git $cmd --help-all >usage &&
|
||||||
|
test_grep "[Uu]sage: git $cmd " usage
|
||||||
|
'
|
||||||
done
|
done
|
||||||
|
|
||||||
test_expect_success 'fmt-merge-msg does not crash with -h' '
|
test_expect_success 'fmt-merge-msg does not crash with -h' '
|
||||||
|
|||||||
3
usage.c
3
usage.c
@@ -192,7 +192,8 @@ static void show_usage_if_asked_helper(const char *err, ...)
|
|||||||
|
|
||||||
void show_usage_if_asked(int ac, const char **av, const char *err)
|
void show_usage_if_asked(int ac, const char **av, const char *err)
|
||||||
{
|
{
|
||||||
if (ac == 2 && !strcmp(av[1], "-h"))
|
if (ac == 2 && (!strcmp(av[1], "-h") ||
|
||||||
|
!strcmp(av[1], "--help-all")))
|
||||||
show_usage_if_asked_helper(err);
|
show_usage_if_asked_helper(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user