The help command currently hard codes the list of guides and their summary in C. Let's move this list to command-list.txt. This lets us extract summary lines from Documentation/git*.txt. This also potentially lets us lists guides in git.txt, but I'll leave that for now. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- Documentation/gitattributes.txt | 2 +- Documentation/gitmodules.txt | 2 +- Documentation/gitrevisions.txt | 2 +- builtin/help.c | 32 -------------------------------- command-list.txt | 8 ++++++++ generate-cmdlist.sh | 6 +++++- help.c | 22 ++++++++++++++++++++++ help.h | 1 + 8 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index 1094fe2b5b..083c2f380d 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -3,7 +3,7 @@ gitattributes(5) NAME ---- -gitattributes - defining attributes per path +gitattributes - Defining attributes per path SYNOPSIS -------- diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt index db5d47eb19..4d63def206 100644 --- a/Documentation/gitmodules.txt +++ b/Documentation/gitmodules.txt @@ -3,7 +3,7 @@ gitmodules(5) NAME ---- -gitmodules - defining submodule properties +gitmodules - Defining submodule properties SYNOPSIS -------- diff --git a/Documentation/gitrevisions.txt b/Documentation/gitrevisions.txt index 27dec5b91d..1f6cceaefb 100644 --- a/Documentation/gitrevisions.txt +++ b/Documentation/gitrevisions.txt @@ -3,7 +3,7 @@ gitrevisions(7) NAME ---- -gitrevisions - specifying revisions and ranges for Git +gitrevisions - Specifying revisions and ranges for Git SYNOPSIS -------- diff --git a/builtin/help.c b/builtin/help.c index 0e0af8426a..5727fb5e51 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -402,38 +402,6 @@ static void show_html_page(const char *git_cmd) open_html(page_path.buf); } -static struct { - const char *name; - const char *help; -} common_guides[] = { - { "attributes", N_("Defining attributes per path") }, - { "everyday", N_("Everyday Git With 20 Commands Or So") }, - { "glossary", N_("A Git glossary") }, - { "ignore", N_("Specifies intentionally untracked files to ignore") }, - { "modules", N_("Defining submodule properties") }, - { "revisions", N_("Specifying revisions and ranges for Git") }, - { "tutorial", N_("A tutorial introduction to Git (for version 1.5.1 or newer)") }, - { "workflows", N_("An overview of recommended workflows with Git") }, -}; - -static void list_common_guides_help(void) -{ - int i, longest = 0; - - for (i = 0; i < ARRAY_SIZE(common_guides); i++) { - if (longest < strlen(common_guides[i].name)) - longest = strlen(common_guides[i].name); - } - - puts(_("The common Git guides are:\n")); - for (i = 0; i < ARRAY_SIZE(common_guides); i++) { - printf(" %s ", common_guides[i].name); - mput_char(' ', longest - strlen(common_guides[i].name)); - puts(_(common_guides[i].help)); - } - putchar('\n'); -} - static const char *check_git_cmd(const char* cmd) { char *alias; diff --git a/command-list.txt b/command-list.txt index a1fad28fd8..0809a19184 100644 --- a/command-list.txt +++ b/command-list.txt @@ -149,3 +149,11 @@ gitweb ancillaryinterrogators git-whatchanged ancillaryinterrogators git-worktree mainporcelain git-write-tree plumbingmanipulators +gitattributes guide +giteveryday guide +gitglossary guide +gitignore guide +gitmodules guide +gitrevisions guide +gittutorial guide +gitworkflows guide diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh index e0893e979a..e35f3e357b 100755 --- a/generate-cmdlist.sh +++ b/generate-cmdlist.sh @@ -67,7 +67,11 @@ command_list "$1" | sort | while read cmd category tags do - name=${cmd/git-} + if [ "$category" = guide ]; then + name=${cmd/git} + else + name=${cmd/git-} + fi sed -n ' /^NAME/,/'"$cmd"'/H ${ diff --git a/help.c b/help.c index 7f72051641..a44f4a113e 100644 --- a/help.c +++ b/help.c @@ -313,6 +313,28 @@ static void list_commands_by_category(int cat, struct cmdname_help *cmds, } } +void list_common_guides_help(void) +{ + int i, longest = 0; + int nr = ARRAY_SIZE(command_list); + struct cmdname_help *cmds = command_list; + + QSORT(cmds, nr, cmd_category_cmp); + + for (i = 0; i < nr; i++) { + struct cmdname_help *cmd = cmds + i; + + if (cmd->category != CAT_guide) + continue; + if (longest < strlen(cmd->name)) + longest = strlen(cmd->name); + } + + puts(_("The common Git guides are:\n")); + list_commands_by_category(CAT_guide, cmds, nr, longest); + putchar('\n'); +} + void list_all_cmds_help(void) { int i, longest = 0; diff --git a/help.h b/help.h index 62449f1b7e..de094e9e65 100644 --- a/help.h +++ b/help.h @@ -18,6 +18,7 @@ static inline void mput_char(char c, unsigned int num) extern void list_common_cmds_help(void); extern void list_all_cmds_help(void); +extern void list_common_guides_help(void); extern void list_all_cmds(void); extern void list_porcelain_cmds(void); extern const char *help_unknown_cmd(const char *cmd); -- 2.17.0.367.g5dd2e386c3