chiark / gitweb /
Merge branch 'fixes/independent-help' into refs/top-bases/i/basis-merge
[topgit.git] / tg.sh
diff --git a/tg.sh b/tg.sh
index ffc120a9bedc18b0bde6501f4264c58fd1c92465..838dc49185be1fa81b288830ca950725d469ae10 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -388,6 +388,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
@@ -441,6 +464,9 @@ get_temp()
 [ -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; }
+
 ensure_git_repo_or_die
 
 ## Initial setup
@@ -482,9 +508,6 @@ cmd="$1"
 shift
 
 case "$cmd" in
-help|--help|-h)
-       do_help "$1"
-       exit 0;;
 --hooks-path)
        # Internal command
        echo "@hooksdir@";;