diff --git a/help.c b/help.c index 37a9c25db72d2a69a8076517870b7b874bd336a9..0f1cb7172bbafaad977ebd661e802c304e553c18 100644 --- a/help.c +++ b/help.c @@ -239,24 +239,32 @@ void list_common_cmds_help(void) } } -static void show_man_page(const char *git_cmd) +static const char *cmd_to_page(const char *git_cmd) { - const char *page; - if (!prefixcmp(git_cmd, "git")) - page = git_cmd; + return git_cmd; else { int page_len = strlen(git_cmd) + 4; char *p = xmalloc(page_len + 1); strcpy(p, "git-"); strcpy(p + 4, git_cmd); p[page_len] = 0; - page = p; + return p; } +} +static void show_man_page(const char *git_cmd) +{ + const char *page = cmd_to_page(git_cmd); execlp("man", "man", page, NULL); } +static void show_info_page(const char *git_cmd) +{ + const char *page = cmd_to_page(git_cmd); + execlp("info", "info", page, NULL); +} + void help_unknown_cmd(const char *cmd) { fprintf(stderr, "git: '%s' is not a git-command. See 'git --help'.\n", cmd); @@ -269,10 +277,8 @@ int cmd_version(int argc, const char **argv, const char *prefix) return 0; } -int cmd_help(int argc, const char **argv, const char *prefix) +static void check_help_cmd(const char *help_cmd) { - const char *help_cmd = argc > 1 ? argv[1] : NULL; - if (!help_cmd) { printf("usage: %s\n\n", git_usage_string); list_common_cmds_help(); @@ -284,6 +290,19 @@ int cmd_help(int argc, const char **argv, const char *prefix) list_commands(); exit(0); } +} + +int cmd_help(int argc, const char **argv, const char *prefix) +{ + const char *help_cmd = argc > 1 ? argv[1] : NULL; + check_help_cmd(help_cmd); + + if (!strcmp(help_cmd, "--info") || !strcmp(help_cmd, "-i")) { + help_cmd = argc > 2 ? argv[2] : NULL; + check_help_cmd(help_cmd); + + show_info_page(help_cmd); + } else show_man_page(help_cmd);