mirror of
https://github.com/git/git.git
synced 2024-09-28 20:51:42 +02:00
cfb22a02ab
The previous commit added code generation for all_cmd_desc[] which includes almost everything we need to generate common command list. Convert help code to use that array instead and drop common_cmds[] array. The description of each common command group is removed from command-list.txt. This keeps this file format simpler. common-cmds.h will not be generated correctly after this change due to the command-list.txt format change. But it does not matter and common-cmds.h will be removed. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
114 lines
1.8 KiB
Bash
Executable File
114 lines
1.8 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?"
|
|
}
|
|
|
|
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 "};"
|
|
}
|
|
|
|
echo "/* Automatically generated by generate-cmdlist.sh */
|
|
struct cmdname_help {
|
|
const char *name;
|
|
const char *help;
|
|
uint32_t category;
|
|
};
|
|
"
|
|
if test -z "$2"
|
|
then
|
|
define_categories "$1"
|
|
echo
|
|
print_command_list "$1"
|
|
exit 0
|
|
fi
|
|
|
|
echo "static const char *common_cmd_groups[] = {"
|
|
|
|
grps=grps$$.tmp
|
|
match=match$$.tmp
|
|
trap "rm -f '$grps' '$match'" 0 1 2 3 15
|
|
|
|
sed -n '
|
|
1,/^### common groups/b
|
|
/^### command list/q
|
|
/^#/b
|
|
/^[ ]*$/b
|
|
h;s/^[^ ][^ ]*[ ][ ]*\(.*\)/ N_("\1"),/p
|
|
g;s/^\([^ ][^ ]*\)[ ].*/\1/w '$grps'
|
|
' "$1"
|
|
printf '};\n\n'
|
|
|
|
n=0
|
|
substnum=
|
|
while read grp
|
|
do
|
|
echo "^git-..*[ ]$grp"
|
|
substnum="$substnum${substnum:+;}s/[ ]$grp/$n/"
|
|
n=$(($n+1))
|
|
done <"$grps" >"$match"
|
|
|
|
printf 'static struct cmdname_help common_cmds[] = {\n'
|
|
grep -f "$match" "$1" |
|
|
sed 's/^git-//' |
|
|
sort |
|
|
while read cmd tags
|
|
do
|
|
tag=$(echo "$tags" | sed "$substnum; s/[^0-9]//g")
|
|
echo " {\"$cmd\", $(get_synopsis git-$cmd), $tag},"
|
|
done
|
|
echo "};"
|