3ac68a93fd
Sometimes it helps to list all available config vars so the user can search for something they want. The config man page can also be used but it's harder to search if you want to focus on the variable name, for example. This is not the best way to collect the available config since it's not precise. Ideally we should have a centralized list of config in C code (pretty much like 'struct option'), but that's a lot more work. This will do for now. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
110 lines
1.6 KiB
Bash
Executable File
110 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () {
|
|
echo "$@" >&2
|
|
exit 1
|
|
}
|
|
|
|
command_list () {
|
|
grep -v '^#' "$1"
|
|
}
|
|
|
|
get_categories () {
|
|
tr ' ' '\n'|
|
|
grep -v '^$' |
|
|
sort |
|
|
uniq
|
|
}
|
|
|
|
category_list () {
|
|
command_list "$1" |
|
|
cut -c 40- |
|
|
get_categories
|
|
}
|
|
|
|
get_synopsis () {
|
|
sed -n '
|
|
/^NAME/,/'"$1"'/H
|
|
${
|
|
x
|
|
s/.*'"$1"' - \(.*\)/N_("\1")/
|
|
p
|
|
}' "Documentation/$1.txt"
|
|
}
|
|
|
|
define_categories () {
|
|
echo
|
|
echo "/* Command categories */"
|
|
bit=0
|
|
category_list "$1" |
|
|
while read cat
|
|
do
|
|
echo "#define CAT_$cat (1UL << $bit)"
|
|
bit=$(($bit+1))
|
|
done
|
|
test "$bit" -gt 32 && die "Urgh.. too many categories?"
|
|
}
|
|
|
|
define_category_names () {
|
|
echo
|
|
echo "/* Category names */"
|
|
echo "static const char *category_names[] = {"
|
|
bit=0
|
|
category_list "$1" |
|
|
while read cat
|
|
do
|
|
echo " \"$cat\", /* (1UL << $bit) */"
|
|
bit=$(($bit+1))
|
|
done
|
|
echo " NULL"
|
|
echo "};"
|
|
}
|
|
|
|
print_command_list () {
|
|
echo "static struct cmdname_help command_list[] = {"
|
|
|
|
command_list "$1" |
|
|
while read cmd rest
|
|
do
|
|
printf " { \"$cmd\", $(get_synopsis $cmd), 0"
|
|
for cat in $(echo "$rest" | get_categories)
|
|
do
|
|
printf " | CAT_$cat"
|
|
done
|
|
echo " },"
|
|
done
|
|
echo "};"
|
|
}
|
|
|
|
print_config_list () {
|
|
cat <<EOF
|
|
static const char *config_name_list[] = {
|
|
EOF
|
|
grep '^[a-zA-Z].*\..*::$' Documentation/config.txt |
|
|
sed '/deprecated/d; s/::$//; s/, */\n/g' |
|
|
sort |
|
|
while read line
|
|
do
|
|
echo " \"$line\","
|
|
done
|
|
cat <<EOF
|
|
NULL,
|
|
};
|
|
EOF
|
|
}
|
|
|
|
echo "/* Automatically generated by generate-cmdlist.sh */
|
|
struct cmdname_help {
|
|
const char *name;
|
|
const char *help;
|
|
uint32_t category;
|
|
};
|
|
"
|
|
define_categories "$1"
|
|
echo
|
|
define_category_names "$1"
|
|
echo
|
|
print_command_list "$1"
|
|
echo
|
|
print_config_list
|