summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2008-06-28 04:35:03 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-06-28 06:21:45 (GMT)
commit2dce956e397be8a769624e8693565b8a30056060 (patch)
treee6e18a59666f7bec399b6852d977c93d77d37cd5
parentd0658ec6fac6b0a1830dbd2ead38facaff97fda7 (diff)
downloadgit-2dce956e397be8a769624e8693565b8a30056060.zip
git-2dce956e397be8a769624e8693565b8a30056060.tar.gz
git-2dce956e397be8a769624e8693565b8a30056060.tar.bz2
help: check early if we have a command, if not try a documentation topic
Before this patch, something like "git help tutorial" did not work, people had to use "git help gittutorial" which is not very intuitive. This patch uses the "is_git_command" function to test early if the argument passed to "git help" is a git command, and if this is not the case then we prefix the argument with "git" instead of "git-". This way, things like "git help tutorial" or "git help glossary" will work fine. The little downside of this patch is that the "is_git_command" is a little bit slow. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--help.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/help.c b/help.c
index 8aff94c..5d1a773 100644
--- a/help.c
+++ b/help.c
@@ -527,20 +527,26 @@ static int is_git_command(const char *s)
is_in_cmdlist(&other_cmds, s);
}
+static const char *prepend(const char *prefix, const char *cmd)
+{
+ size_t pre_len = strlen(prefix);
+ size_t cmd_len = strlen(cmd);
+ char *p = xmalloc(pre_len + cmd_len + 1);
+ memcpy(p, prefix, pre_len);
+ strcpy(p + pre_len, cmd);
+ return p;
+}
+
static const char *cmd_to_page(const char *git_cmd)
{
if (!git_cmd)
return "git";
else if (!prefixcmp(git_cmd, "git"))
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;
- return p;
- }
+ else if (is_git_command(git_cmd))
+ return prepend("git-", git_cmd);
+ else
+ return prepend("git", git_cmd);
}
static void setup_man_path(void)