Skip to content

Commit

Permalink
help: use command-list.txt for the source of guides
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
pclouds authored and gitster committed May 21, 2018
1 parent 63eae83 commit 1b81d8c
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 45 deletions.
2 changes: 1 addition & 1 deletion Documentation/gitattributes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ gitattributes(5)

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

SYNOPSIS
--------
Expand Down
2 changes: 1 addition & 1 deletion Documentation/gitmodules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ gitmodules(5)

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

SYNOPSIS
--------
Expand Down
2 changes: 1 addition & 1 deletion Documentation/gitrevisions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ gitrevisions(7)

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

SYNOPSIS
--------
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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):\
Expand Down
32 changes: 0 additions & 32 deletions builtin/help.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
16 changes: 16 additions & 0 deletions command-list.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 10 additions & 5 deletions contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
"
}

Expand Down
21 changes: 17 additions & 4 deletions help.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

}
Expand All @@ -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++;
}
Expand Down Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions help.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
6 changes: 6 additions & 0 deletions t/t0012-help.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 1b81d8c

Please sign in to comment.