This is pretty rough but I'd like to see how people feel about this first. I notice we have two places for command classification. One in command-list.txt, one in __git_list_porcelain_commands() in git-completion.bash. People who are following nd/parseopt-completion probably know that I'm try to reduce duplication in this script as much as possible, this is another step towards that. By keeping all information of command-list.txt in git binary, we could provide the porcelain list to git-completion.bash via "git --list-cmds=porcelain", so we don't neeed a separate command classification in git-completion.bash anymore. Because we have all command synopsis as a side effect, we could now support "git help -a --verbose" which prints something like "git help", a command name and a description, but we could do it for _all_ recognized commands. This could help people look for a command even if we don't provide "git appropos". PS. Elsewhere I introduced --list-builtin-cmds, which should become --list-cmds=builtin if this series seems like a good idea to move forward. Nguyễn Thái Ngọc Duy (5): git.c: convert --list-builtins to --list-cmds=builtins git.c: implement --list-cmds=all and use it in git-completion.bash generate-cmdlist.sh: keep all information in common-cmds.h git.c: implement --list-cmds=porcelain help: add "-a --verbose" to list all commands with synopsis Documentation/git-help.txt | 4 +- builtin/help.c | 6 ++ contrib/completion/git-completion.bash | 94 +----------------- generate-cmdlist.sh | 46 ++++++--- git.c | 11 ++- help.c | 131 +++++++++++++++++++++++-- help.h | 3 + t/t0012-help.sh | 2 +- t/t9902-completion.sh | 4 +- 9 files changed, 187 insertions(+), 114 deletions(-) -- 2.17.0.rc0.348.gd5a49e0b6f