Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'generate-cmdlist.sh')
-rwxr-xr-xgenerate-cmdlist.sh67
1 files changed, 63 insertions, 4 deletions
diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
index 31b6d886cb..870d3b626a 100755
--- a/generate-cmdlist.sh
+++ b/generate-cmdlist.sh
@@ -1,5 +1,27 @@
#!/bin/sh
+die () {
+ echo "$@" >&2
+ exit 1
+}
+
+command_list () {
+ sed '1,/^### command list/d;/^#/d' "$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
@@ -10,14 +32,51 @@ get_synopsis () {
}' "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 {
- char name[16];
- char help[80];
- unsigned char group;
+ const char *name;
+ const char *help;
+ uint32_t group;
};
+"
+if test -z "$2"
+then
+ define_categories "$1"
+ echo
+ print_command_list "$1"
+ exit 0
+fi
-static const char *common_cmd_groups[] = {"
+echo "static const char *common_cmd_groups[] = {"
grps=grps$$.tmp
match=match$$.tmp