Browse Source

help: use command-list.txt for the source of guides

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 list guides in git.txt, but I'll leave that for
now.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Nguyễn Thái Ngọc Duy 7 years ago committed by Junio C Hamano
parent
commit
1b81d8cb19
  1. 2
      Documentation/gitattributes.txt
  2. 2
      Documentation/gitmodules.txt
  3. 2
      Documentation/gitrevisions.txt
  4. 2
      Makefile
  5. 32
      builtin/help.c
  6. 16
      command-list.txt
  7. 15
      contrib/completion/git-completion.bash
  8. 21
      help.c
  9. 1
      help.h
  10. 6
      t/t0012-help.sh

2
Documentation/gitattributes.txt

@ -3,7 +3,7 @@ gitattributes(5) @@ -3,7 +3,7 @@ gitattributes(5)

NAME
----
gitattributes - defining attributes per path
gitattributes - Defining attributes per path

SYNOPSIS
--------

2
Documentation/gitmodules.txt

@ -3,7 +3,7 @@ gitmodules(5) @@ -3,7 +3,7 @@ gitmodules(5)

NAME
----
gitmodules - defining submodule properties
gitmodules - Defining submodule properties

SYNOPSIS
--------

2
Documentation/gitrevisions.txt

@ -3,7 +3,7 @@ gitrevisions(7) @@ -3,7 +3,7 @@ gitrevisions(7)

NAME
----
gitrevisions - specifying revisions and ranges for Git
gitrevisions - Specifying revisions and ranges for Git

SYNOPSIS
--------

2
Makefile

@ -1937,7 +1937,7 @@ $(BUILT_INS): git$X @@ -1937,7 +1937,7 @@ $(BUILT_INS): git$X

command-list.h: generate-cmdlist.sh command-list.txt

command-list.h: $(wildcard Documentation/git-*.txt)
command-list.h: $(wildcard Documentation/git*.txt)
$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh command-list.txt >$@+ && mv $@+ $@

SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\

32
builtin/help.c

@ -402,38 +402,6 @@ static void show_html_page(const char *git_cmd) @@ -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;

16
command-list.txt

@ -139,3 +139,19 @@ gitweb ancillaryinterrogators @@ -139,3 +139,19 @@ gitweb ancillaryinterrogators
git-whatchanged ancillaryinterrogators
git-worktree mainporcelain
git-write-tree plumbingmanipulators
gitattributes guide
gitcli guide
gitcore-tutorial guide
gitcvs-migration guide
gitdiffcore guide
giteveryday guide
gitglossary guide
githooks guide
gitignore guide
gitmodules guide
gitnamespaces guide
gitrepository-layout guide
gitrevisions guide
gittutorial-2 guide
gittutorial guide
gitworkflows guide

15
contrib/completion/git-completion.bash

@ -1575,6 +1575,13 @@ _git_grep () @@ -1575,6 +1575,13 @@ _git_grep ()
__git_complete_refs
}

__git_all_guides=
__git_compute_all_guides ()
{
test -n "$__git_all_guides" ||
__git_all_guides=$(git --list-cmds=list-guide)
}

_git_help ()
{
case "$cur" in
@ -1584,11 +1591,9 @@ _git_help () @@ -1584,11 +1591,9 @@ _git_help ()
;;
esac
__git_compute_all_commands
__gitcomp "$__git_all_commands $(__git_aliases)
attributes cli core-tutorial cvs-migration
diffcore everyday gitk glossary hooks ignore modules
namespaces repository-layout revisions tutorial tutorial-2
workflows
__git_compute_all_guides
__gitcomp "$__git_all_commands $(__git_aliases) $__git_all_guides
gitk
"
}


21
help.c

@ -39,12 +39,14 @@ static struct category_description main_categories[] = { @@ -39,12 +39,14 @@ static struct category_description main_categories[] = {
{ 0, NULL }
};

static const char *drop_prefix(const char *name)
static const char *drop_prefix(const char *name, uint32_t category)
{
const char *new_name;

if (skip_prefix(name, "git-", &new_name))
return new_name;
if (category == CAT_guide && skip_prefix(name, "git", &new_name))
return new_name;
return name;

}
@ -66,7 +68,7 @@ static void extract_cmds(struct cmdname_help **p_cmds, uint32_t mask) @@ -66,7 +68,7 @@ static void extract_cmds(struct cmdname_help **p_cmds, uint32_t mask)
continue;

cmds[nr] = *cmd;
cmds[nr].name = drop_prefix(cmd->name);
cmds[nr].name = drop_prefix(cmd->name, cmd->category);

nr++;
}
@ -358,11 +360,22 @@ void list_cmds_by_category(struct string_list *list, @@ -358,11 +360,22 @@ void list_cmds_by_category(struct string_list *list,
for (i = 0; i < n; i++) {
struct cmdname_help *cmd = command_list + i;

if (cmd->category & cat_id)
string_list_append(list, drop_prefix(cmd->name));
if (!(cmd->category & cat_id))
continue;
string_list_append(list, drop_prefix(cmd->name, cmd->category));
}
}

void list_common_guides_help(void)
{
struct category_description catdesc[] = {
{ CAT_guide, N_("The common Git guides are:") },
{ 0, NULL }
};
print_cmd_by_category(catdesc);
putchar('\n');
}

void list_all_cmds_help(void)
{
print_cmd_by_category(main_categories);

1
help.h

@ -20,6 +20,7 @@ static inline void mput_char(char c, unsigned int num) @@ -20,6 +20,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_main_cmds(struct string_list *list);
extern void list_all_other_cmds(struct string_list *list);

6
t/t0012-help.sh

@ -66,6 +66,12 @@ test_expect_success 'git help' ' @@ -66,6 +66,12 @@ test_expect_success 'git help' '
test_i18ngrep "^ commit " help.output &&
test_i18ngrep "^ fetch " help.output
'
test_expect_success 'git help -g' '
git help -g >help.output &&
test_i18ngrep "^ attributes " help.output &&
test_i18ngrep "^ everyday " help.output &&
test_i18ngrep "^ tutorial " help.output
'

test_expect_success 'generate builtin list' '
git --list-cmds=builtins >builtins

Loading…
Cancel
Save