]> git.tue.mpg.de Git - gsu.git/commitdiff
gsu: Avoid duplication of command regex.
authorAndre Noll <maan@systemlinux.org>
Tue, 2 Aug 2011 13:09:21 +0000 (15:09 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Fri, 29 Aug 2014 19:39:58 +0000 (21:39 +0200)
The regular expression for fining the subcommands was duplicated
four times in gsu. Needless to say that this resulted in more than
one variant of the expression...

Avoid this duplication by introducing the global gsu_command_regex
variable. While at it, use a more clever sed command in
_gsu_available_commands() which allows to kill a grep command.

funcs/gsu

index c11d19f92ff02e6db1ba4053110780acaa47a438..63e0acf7dfb705047efb1f4809c9af3282fbe9a3 100644 (file)
--- a/funcs/gsu
+++ b/funcs/gsu
@@ -137,13 +137,16 @@ _gsu_usage()
 }
 export -f _gsu_usage
 
+# Each line matching this is recognized as a subcommand. The name
+# of the subcommand is the first subexpression.
+export gsu_command_regex='^com_\([a-zA-Z_0-9]\+\)()'
+
 _gsu_available_commands()
 {
-       result="$( (printf "help\nman\nprefs\n"; grep "^com_[a-z_]\+()" $0) \
-               | sed -e 's/^com_//' -e 's/()//' \
-               | sort \
-               | tr '\n' ' ')"
-       ret=$GSU_SUCCESS
+       result="$({
+               printf "help\nman\nprefs\n"
+               sed -ne "s/$gsu_command_regex/\1/g;T;p" $0
+               } | sort | tr '\n' ' ')"
 }
 export -f _gsu_available_commands
 
@@ -281,13 +284,13 @@ _com_help()
                        printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--"
                        printf "com_man()\n$gsu_man_txt" | head -n 4; echo "--"
                        printf "com_prefs()\n$gsu_prefs_txt" | head -n 4; echo "--"
-                       grep -A 2 "^com_\([a-zA-Z_0-9]\+\)()" $0
+                       grep -A 2 "$gsu_command_regex" $0
                } | grep -v -- '--' \
-                       | sed -e '/^com_\([a-zA-Z_0-9]\+\)()/bs' \
+                       | sed -e "/$gsu_command_regex/bs" \
                                -e 'H;$!d;x;s/\n//g;b' \
                                -e :s \
                                -e 'x;s/\n//g;${p;x;}' \
-                       | sed -e 's/^com_\([a-zA-Z_0-9]\+\)()#*/\1\t/' \
+                       | sed -e "s/${gsu_command_regex}#*/\1\t/" \
                        | sort \
                        | while read a b; do
                                printf "$a\t"