help -a: improve and make --verbose default
When you type "git help" (or just "git") you are greeted with a list with commonly used commands and their short description and are suggested to use "git help -a" or "git help -g" for more details. "git help -av" would be more friendly and inline with what is shown with "git help" since it shows list of commands with description as well, and commands are properly grouped. "help -av" does not show everything "help -a" shows though. Add external command section in "help -av" for this. While at there, add a section for aliases as well (until now aliases have no UI, just "git config"). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Reviewed-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1d4361b0f3
commit
26c7d06783
@ -8,7 +8,7 @@ git-help - Display help information about Git
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git help' [-a|--all [--verbose]] [-g|--guide]
|
'git help' [-a|--all [--[no-]verbose]] [-g|--guide]
|
||||||
[-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
|
[-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -42,8 +42,10 @@ OPTIONS
|
|||||||
--all::
|
--all::
|
||||||
Prints all the available commands on the standard output. This
|
Prints all the available commands on the standard output. This
|
||||||
option overrides any given command or guide name.
|
option overrides any given command or guide name.
|
||||||
When used with `--verbose` print description for all recognized
|
|
||||||
commands.
|
--verbose::
|
||||||
|
When used with `--all` print description for all recognized
|
||||||
|
commands. This is the default.
|
||||||
|
|
||||||
-c::
|
-c::
|
||||||
--config::
|
--config::
|
||||||
|
@ -38,7 +38,7 @@ static const char *html_path;
|
|||||||
static int show_all = 0;
|
static int show_all = 0;
|
||||||
static int show_guides = 0;
|
static int show_guides = 0;
|
||||||
static int show_config;
|
static int show_config;
|
||||||
static int verbose;
|
static int verbose = 1;
|
||||||
static unsigned int colopts;
|
static unsigned int colopts;
|
||||||
static enum help_format help_format = HELP_FORMAT_NONE;
|
static enum help_format help_format = HELP_FORMAT_NONE;
|
||||||
static int exclude_guides;
|
static int exclude_guides;
|
||||||
|
50
help.c
50
help.c
@ -98,7 +98,8 @@ static int cmd_name_cmp(const void *elem1, const void *elem2)
|
|||||||
return strcmp(e1->name, e2->name);
|
return strcmp(e1->name, e2->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_cmd_by_category(const struct category_description *catdesc)
|
static void print_cmd_by_category(const struct category_description *catdesc,
|
||||||
|
int *longest_p)
|
||||||
{
|
{
|
||||||
struct cmdname_help *cmds;
|
struct cmdname_help *cmds;
|
||||||
int longest = 0;
|
int longest = 0;
|
||||||
@ -124,6 +125,8 @@ static void print_cmd_by_category(const struct category_description *catdesc)
|
|||||||
print_command_list(cmds, mask, longest);
|
print_command_list(cmds, mask, longest);
|
||||||
}
|
}
|
||||||
free(cmds);
|
free(cmds);
|
||||||
|
if (longest_p)
|
||||||
|
*longest_p = longest;
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_cmdname(struct cmdnames *cmds, const char *name, int len)
|
void add_cmdname(struct cmdnames *cmds, const char *name, int len)
|
||||||
@ -307,7 +310,7 @@ void list_commands(unsigned int colopts,
|
|||||||
void list_common_cmds_help(void)
|
void list_common_cmds_help(void)
|
||||||
{
|
{
|
||||||
puts(_("These are common Git commands used in various situations:"));
|
puts(_("These are common Git commands used in various situations:"));
|
||||||
print_cmd_by_category(common_categories);
|
print_cmd_by_category(common_categories, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void list_all_main_cmds(struct string_list *list)
|
void list_all_main_cmds(struct string_list *list)
|
||||||
@ -405,7 +408,7 @@ void list_common_guides_help(void)
|
|||||||
{ CAT_guide, N_("The common Git guides are:") },
|
{ CAT_guide, N_("The common Git guides are:") },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
print_cmd_by_category(catdesc);
|
print_cmd_by_category(catdesc, NULL);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,9 +497,48 @@ void list_config_help(int for_human)
|
|||||||
string_list_clear(&keys, 0);
|
string_list_clear(&keys, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_alias(const char *var, const char *value, void *data)
|
||||||
|
{
|
||||||
|
struct string_list *list = data;
|
||||||
|
|
||||||
|
if (skip_prefix(var, "alias.", &var))
|
||||||
|
string_list_append(list, var)->util = xstrdup(value);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void list_all_cmds_help(void)
|
void list_all_cmds_help(void)
|
||||||
{
|
{
|
||||||
print_cmd_by_category(main_categories);
|
struct string_list others = STRING_LIST_INIT_DUP;
|
||||||
|
struct string_list alias_list = STRING_LIST_INIT_DUP;
|
||||||
|
struct cmdname_help *aliases;
|
||||||
|
int i, longest;
|
||||||
|
|
||||||
|
printf_ln(_("See 'git help <command>' to read about a specific subcommand"));
|
||||||
|
print_cmd_by_category(main_categories, &longest);
|
||||||
|
|
||||||
|
list_all_other_cmds(&others);
|
||||||
|
if (others.nr)
|
||||||
|
printf("\n%s\n", _("External commands"));
|
||||||
|
for (i = 0; i < others.nr; i++)
|
||||||
|
printf(" %s\n", others.items[i].string);
|
||||||
|
string_list_clear(&others, 0);
|
||||||
|
|
||||||
|
git_config(get_alias, &alias_list);
|
||||||
|
string_list_sort(&alias_list);
|
||||||
|
if (alias_list.nr) {
|
||||||
|
printf("\n%s\n", _("Command aliases"));
|
||||||
|
ALLOC_ARRAY(aliases, alias_list.nr + 1);
|
||||||
|
for (i = 0; i < alias_list.nr; i++) {
|
||||||
|
aliases[i].name = alias_list.items[i].string;
|
||||||
|
aliases[i].help = alias_list.items[i].util;
|
||||||
|
aliases[i].category = 1;
|
||||||
|
}
|
||||||
|
aliases[alias_list.nr].name = NULL;
|
||||||
|
print_command_list(aliases, 1, longest);
|
||||||
|
free(aliases);
|
||||||
|
}
|
||||||
|
string_list_clear(&alias_list, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_in_cmdlist(struct cmdnames *c, const char *s)
|
int is_in_cmdlist(struct cmdnames *c, const char *s)
|
||||||
|
@ -29,9 +29,9 @@ test_expect_success "setup" '
|
|||||||
# to verify
|
# to verify
|
||||||
test_expect_success 'basic help commands' '
|
test_expect_success 'basic help commands' '
|
||||||
git help >/dev/null &&
|
git help >/dev/null &&
|
||||||
git help -a >/dev/null &&
|
git help -a --no-verbose >/dev/null &&
|
||||||
git help -g >/dev/null &&
|
git help -g >/dev/null &&
|
||||||
git help -av >/dev/null
|
git help -a >/dev/null
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success "works for commands and guides by default" '
|
test_expect_success "works for commands and guides by default" '
|
||||||
|
Loading…
Reference in New Issue
Block a user