]> granicus.if.org Git - git/commitdiff
help: make option --help open man pages only for Git commands
authorRalf Thielow <ralf.thielow@gmail.com>
Fri, 26 Aug 2016 17:58:36 +0000 (19:58 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 30 Aug 2016 23:09:41 +0000 (16:09 -0700)
If option --help is passed to a Git command, we try to open
the man page of that command.  However, we do it for both commands
and concepts.  Make sure it is an actual command.

This makes "git <concept> --help" not working anymore, while
"git help <concept>" still works.

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git.c
t/t0012-help.sh

diff --git a/git.c b/git.c
index 968a8a464588f10c5c1564440e06d5e5afe8d37a..6ade0bc93807c2bd2f2f325d203643ea32a9cd8c 100644 (file)
--- a/git.c
+++ b/git.c
@@ -522,21 +522,34 @@ static void strip_extension(const char **argv)
 
 static void handle_builtin(int argc, const char **argv)
 {
+       struct argv_array args = ARGV_ARRAY_INIT;
        const char *cmd;
        struct cmd_struct *builtin;
 
        strip_extension(argv);
        cmd = argv[0];
 
-       /* Turn "git cmd --help" into "git help cmd" */
+       /* Turn "git cmd --help" into "git help --exclude-guides cmd" */
        if (argc > 1 && !strcmp(argv[1], "--help")) {
+               int i;
+
                argv[1] = argv[0];
                argv[0] = cmd = "help";
+
+               for (i = 0; i < argc; i++) {
+                       argv_array_push(&args, argv[i]);
+                       if (!i)
+                               argv_array_push(&args, "--exclude-guides");
+               }
+
+               argc++;
+               argv = args.argv;
        }
 
        builtin = get_builtin(cmd);
        if (builtin)
                exit(run_builtin(builtin, argc, argv));
+       argv_array_clear(&args);
 }
 
 static void execv_dashed_external(const char **argv)
index 920a663c3e254ec29fb2bcac2f403719ac435119..8faba2e8bc52a2611eb55dbd807f9eba34748698 100755 (executable)
@@ -41,4 +41,12 @@ test_expect_success "--exclude-guides does not work for guides" '
        test_must_be_empty test-browser.log
 '
 
+test_expect_success "--help does not work for guides" "
+       cat <<-EOF >expect &&
+               git: 'revisions' is not a git command. See 'git --help'.
+       EOF
+       test_must_fail git revisions --help 2>actual &&
+       test_i18ncmp expect actual
+"
+
 test_done