chiark / gitweb /
Merge commit 'refs/top-bases/fixes/independent-help' into fixes/independent-help
[topgit.git] / tg.sh
diff --git a/tg.sh b/tg.sh
index 1762f03e9522d96b01ffa6ee2f028e1464ffc174..6282250ee0d4e63fcca583a52cd47fc39aefc53e 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -3,6 +3,7 @@
 # (c) Petr Baudis <pasky@suse.cz>  2008
 # GPLv2
 
+TG_VERSION=0.6
 
 ## Auxiliary functions
 
@@ -249,7 +250,7 @@ do_help()
                        sep="|"
                done
 
-               echo "TopGit v0.5 - A different patch queue manager"
+               echo "TopGit v$TG_VERSION - A different patch queue manager"
                echo "Usage: tg [-r REMOTE] ($cmds|help) ..."
        elif [ -r "@cmddir@"/tg-$1 ] ; then
                @cmddir@/tg-$1 -h || :
@@ -264,6 +265,29 @@ 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"
+}
+
 ## Pager stuff
 
 # isatty FD
@@ -308,6 +332,9 @@ setup_pager()
 [ -d "@cmddir@" ] ||
        die "No command directory: '@cmddir@'"
 
+# 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
 
 set -e
@@ -343,9 +370,6 @@ cmd="$1"
 shift
 
 case "$cmd" in
-help|--help|-h)
-       do_help "$1"
-       exit 0;;
 --hooks-path)
        # Internal command
        echo "@hooksdir@";;