packaging: Add contrib installation
[platform/upstream/git.git] / generate-cmdlist.sh
index 9a4c9b9..9dbbb08 100755 (executable)
@@ -1,23 +1,98 @@
 #!/bin/sh
 
-echo "/* Automatically generated by $0 */
-struct cmdname_help {
-    char name[16];
-    char help[80];
-};
+die () {
+       echo "$@" >&2
+       exit 1
+}
+
+command_list () {
+       eval "grep -ve '^#' $exclude_programs" <"$1"
+}
+
+get_categories () {
+       tr ' ' '\012'|
+       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"
+}
 
-static struct cmdname_help common_cmds[] = {"
+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?"
+}
 
-sed -n -e 's/^git-\([^         ]*\)[   ].* common.*/\1/p' command-list.txt |
-sort |
-while read cmd
+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 "};"
+}
+
+exclude_programs=
+while test "--exclude-program" = "$1"
 do
-     sed -n '
-     /^NAME/,/git-'"$cmd"'/H
-     ${
-           x
-           s/.*git-'"$cmd"' - \(.*\)/  {"'"$cmd"'", N_("\1")},/
-           p
-     }' "Documentation/git-$cmd.txt"
+       shift
+       exclude_programs="$exclude_programs -e \"^$1 \""
+       shift
 done
-echo "};"
+
+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"