Signed-off-by: Nguyễn Thái Ngọc Duy
---
contrib/completion/git-completion.bash | 2 +-
git.c | 2 ++
help.c | 18 ++
help.h | 1 +
4 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/contrib/completion/git-completion.bash
b/contrib/completion/git-completion.bash
index 3556838759..a5f13ade20 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -839,7 +839,7 @@ __git_commands () {
then
printf "%s" "${GIT_TESTING_COMMAND_COMPLETION}"
else
- git help -a|egrep '^ [a-zA-Z0-9]'
+ git --list-cmds=all
fi
}
diff --git a/git.c b/git.c
index 28bfa96d87..64f67e7f7f 100644
--- a/git.c
+++ b/git.c
@@ -228,6 +228,8 @@ static int handle_options(const char ***argv, int *argc,
int *envchanged)
list_builtins(0, '\n');
else if (!strcmp(cmd, "parseopt"))
list_builtins(NO_PARSEOPT, ' ');
+ else if (!strcmp(cmd, "all"))
+ list_all_cmds();
else
die("unsupported command listing type '%s'",
cmd);
exit(0);
diff --git a/help.c b/help.c
index 60071a9bea..e155c39870 100644
--- a/help.c
+++ b/help.c
@@ -228,6 +228,24 @@ void list_common_cmds_help(void)
}
}
+void list_all_cmds(void)
+{
+ struct cmdnames main_cmds, other_cmds;
+ int i;
+
+ memset(_cmds, 0, sizeof(main_cmds));
+ memset(_cmds, 0, sizeof(other_cmds));
+ load_command_list("git-", _cmds, _cmds);
+
+ for (i = 0; i < main_cmds.cnt; i++)
+ puts(main_cmds.names[i]->name);
+ for (i = 0; i < other_cmds.cnt; i++)
+ puts(other_cmds.names[i]->name);
+
+ clean_cmdnames(_cmds);
+ clean_cmdnames(_cmds);
+}
+
int is_in_cmdlist(struct cmdnames *c, const char *s)
{
int i;
diff --git a/help.h b/help.h
index b21d7c94e8..0bf29f8dc5 100644
--- a/help.h
+++ b/help.h
@@ -17,6 +17,7 @@ static inline void mput_char(char c, unsigned int num)
}
extern void list_common_cmds_help(void);
+extern void list_all_cmds(void);
extern const char *help_unknown_cmd(const char *cmd);
extern void load_command_list(const char *prefix,
struct cmdnames *main_cmds,
--
2.17.0.367.g5dd2e386c3