724d63569f
When built with NO_CURL or with NO_UNIX_SOCKETS, some commands are skipped from the build. It does not make sense to list them in the output of `git help -a`, so let's just not. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
118 lines
1.8 KiB
Bash
Executable File
118 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () {
|
|
echo "$@" >&2
|
|
exit 1
|
|
}
|
|
|
|
command_list () {
|
|
eval "grep -ve '^#' $exclude_programs" <"$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 -h '^[a-zA-Z].*\..*::$' Documentation/*config.txt Documentation/config/*.txt |
|
|
sed '/deprecated/d; s/::$//; s/, */\n/g' |
|
|
sort |
|
|
while read line
|
|
do
|
|
echo " \"$line\","
|
|
done
|
|
cat <<EOF
|
|
NULL,
|
|
};
|
|
EOF
|
|
}
|
|
|
|
exclude_programs=
|
|
while test "--exclude-program" = "$1"
|
|
do
|
|
shift
|
|
exclude_programs="$exclude_programs -e \"^$1 \""
|
|
shift
|
|
done
|
|
|
|
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
|