completion: drop the hard coded list of config vars

The new help option --config-for-completion is a machine friendlier
version of --config where all the placeholders and wildcards are
dropped, leaving only the good, completable prefixes for
git-completion.bash to consume.

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:
Nguyễn Thái Ngọc Duy
2018-05-26 15:55:28 +02:00
committed by Junio C Hamano
parent 431bb23a27
commit e17ca92637
4 changed files with 49 additions and 331 deletions

34
help.c
View File

@ -416,7 +416,7 @@ struct slot_expansion {
int found;
};
void list_config_help(void)
void list_config_help(int for_human)
{
struct slot_expansion slot_expansions[] = {
{ "advice", "*", list_config_advices },
@ -460,8 +460,36 @@ void list_config_help(void)
e->prefix, e->placeholder);
string_list_sort(&keys);
for (i = 0; i < keys.nr; i++)
puts(keys.items[i].string);
for (i = 0; i < keys.nr; i++) {
const char *var = keys.items[i].string;
const char *wildcard, *tag, *cut;
if (for_human) {
puts(var);
continue;
}
wildcard = strchr(var, '*');
tag = strchr(var, '<');
if (!wildcard && !tag) {
puts(var);
continue;
}
if (wildcard && !tag)
cut = wildcard;
else if (!wildcard && tag)
cut = tag;
else
cut = wildcard < tag ? wildcard : tag;
/*
* We may produce duplicates, but that's up to
* git-completion.bash to handle
*/
printf("%.*s\n", (int)(cut - var), var);
}
string_list_clear(&keys, 0);
}