mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03:55 +08:00
git --list-cmds: collect command list in a string_list
Instead of printing the command directly one by one, keep them in a list and print at the end. This allows more modification before we print out (e.g. sorting, removing duplicates or even excluding some items). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0089521cac
commit
e5d7a61953
22
git.c
22
git.c
@ -36,7 +36,7 @@ const char git_more_info_string[] =
|
||||
|
||||
static int use_pager = -1;
|
||||
|
||||
static void list_builtins(unsigned int exclude_option, char sep);
|
||||
static void list_builtins(struct string_list *list, unsigned int exclude_option);
|
||||
|
||||
static int match_token(const char *spec, int len, const char *token)
|
||||
{
|
||||
@ -47,18 +47,24 @@ static int match_token(const char *spec, int len, const char *token)
|
||||
|
||||
static int list_cmds(const char *spec)
|
||||
{
|
||||
struct string_list list = STRING_LIST_INIT_DUP;
|
||||
int i;
|
||||
|
||||
while (*spec) {
|
||||
const char *sep = strchrnul(spec, ',');
|
||||
int len = sep - spec;
|
||||
|
||||
if (match_token(spec, len, "builtins"))
|
||||
list_builtins(0, '\n');
|
||||
list_builtins(&list, 0);
|
||||
else
|
||||
die(_("unsupported command listing type '%s'"), spec);
|
||||
spec += len;
|
||||
if (*spec == ',')
|
||||
spec++;
|
||||
}
|
||||
for (i = 0; i < list.nr; i++)
|
||||
puts(list.items[i].string);
|
||||
string_list_clear(&list, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -249,7 +255,13 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
||||
(*argc)--;
|
||||
} else if (skip_prefix(cmd, "--list-cmds=", &cmd)) {
|
||||
if (!strcmp(cmd, "parseopt")) {
|
||||
list_builtins(NO_PARSEOPT, ' ');
|
||||
struct string_list list = STRING_LIST_INIT_DUP;
|
||||
int i;
|
||||
|
||||
list_builtins(&list, NO_PARSEOPT);
|
||||
for (i = 0; i < list.nr; i++)
|
||||
printf("%s ", list.items[i].string);
|
||||
string_list_clear(&list, 0);
|
||||
exit(0);
|
||||
} else {
|
||||
exit(list_cmds(cmd));
|
||||
@ -533,14 +545,14 @@ int is_builtin(const char *s)
|
||||
return !!get_builtin(s);
|
||||
}
|
||||
|
||||
static void list_builtins(unsigned int exclude_option, char sep)
|
||||
static void list_builtins(struct string_list *out, unsigned int exclude_option)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(commands); i++) {
|
||||
if (exclude_option &&
|
||||
(commands[i].option & exclude_option))
|
||||
continue;
|
||||
printf("%s%c", commands[i].cmd, sep);
|
||||
string_list_append(out, commands[i].cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user