builtin: also setup gently for --help-all
Git experts often check the help summary of a command to make sure they
spell options right when suggesting advice to colleagues. Further, they
might check hidden options when responding to queries about deprecated
options like git-rebase(1)'s "preserve merges" option. But some commands
don't support "--help-all" outside of a git directory. Running (for
example)
git rebase --help-all
outside a directory fails in "setup_git_directory", erroring with the
localized form of
fatal: not a git repository (or any of the parent directories): .git
Like 99caeed05d (Let 'git <command> -h' show usage without a git dir,
2009-11-09), we want to show the "--help-all" output even without a git
dir. Make "--help-all" where we expect "-h" to mean
"setup_git_directory_gently", and interpose early in the natural place
("show_usage_with_options_if_asked").
Do the same for usage callers with show_usage_if_asked.
The exception is merge-recursive, whose help block doesn't use newer
APIs.
Best-viewed-with: --ignore-space-change
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
parent
fe54b9ef02
commit
129b3632f3
|
|
@ -38,7 +38,8 @@ int cmd_merge_recursive(int argc,
|
|||
if (argv[0] && ends_with(argv[0], "-subtree"))
|
||||
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;
|
||||
strbuf_addf(&msg, builtin_merge_recursive_usage, argv[0]);
|
||||
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;
|
||||
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))
|
||||
/* demote to GENTLY to allow 'git cmd -h' outside repo */
|
||||
run_setup = RUN_SETUP_GENTLY;
|
||||
|
|
|
|||
|
|
@ -1461,10 +1461,16 @@ void show_usage_with_options_if_asked(int ac, const char **av,
|
|||
const char * const *usagestr,
|
||||
const struct option *opts)
|
||||
{
|
||||
if (ac == 2 && !strcmp(av[1], "-h")) {
|
||||
usage_with_options_internal(NULL, usagestr, opts,
|
||||
USAGE_NORMAL, USAGE_TO_STDOUT);
|
||||
exit(129);
|
||||
if (ac == 2) {
|
||||
if (!strcmp(av[1], "-h")) {
|
||||
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_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
|
||||
|
||||
test_done
|
||||
|
|
|
|||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue