chiark / gitweb /
implement a check function
authormartin f. krafft <madduck@debian.org>
Thu, 20 Nov 2008 11:31:09 +0000 (12:31 +0100)
committermartin f. krafft <madduck@debian.org>
Thu, 20 Nov 2008 11:45:27 +0000 (12:45 +0100)
Signed-off-by: martin f. krafft <madduck@debian.org>
tg.sh

diff --git a/tg.sh b/tg.sh
index da3366d533f49702c1c25ab0a7bd9022e3fdf137..258f8ce4fd6e2e145300bf85c81f869786222e7b 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -235,24 +235,36 @@ do_help()
        fi
 }
 
+# Check whether we are supposed to output the help message
+should_do_help()
+{
+       # we are being sourced for utility functions, never run help
+       [ -z "$tg__include" ] || return 1
+
+       local prev
+       while [ -n "$1" ]; do
+               case "$1" in
+               help|--help|-h)
+                       shift
+                       echo "${1:-$prev}"
+                       return 0
+               esac
+               prev="$1"
+               shift
+       done
+
+       # run help when there was no previous topic, meaning that there where
+       # no arguments at all
+       test -z "$prev"
+}
 
 ## Startup
 
 [ -d "@cmddir@" ] ||
        die "No command directory: '@cmddir@'"
 
-args_saved="$@"
-while [ -n "$1" ]; do
-       case "$1" in
-       help|--help|-h)
-               shift
-               do_help "$1"
-               exit 0;;
-       esac
-       shift
-done
-set -- $args_saved
-unset args_saved
+# check if we should run help and get the topic while we're at it
+help_topic="$(should_do_help "$@")" && { do_help "$help_topic"; exit 0; }
 
 ## Initial setup