chiark / gitweb /
Merge branch 'i/build' into refs/top-bases/i/basis-merge
[topgit.git] / tg.sh
diff --git a/tg.sh b/tg.sh
index 87d34247b680f9d02d721745d5fe05d4810902f8..838dc49185be1fa81b288830ca950725d469ae10 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -378,8 +378,8 @@ do_help()
                setup_pager
                @cmddir@/tg-$1 -h 2>&1 || :
                echo
-               if [ -r "@sharedir@/tg-$1.txt" ] ; then
-                       cat "@sharedir@/tg-$1.txt"
+               if [ -r "@docdir@/tg-$1.txt" ] ; then
+                       cat "@docdir@/tg-$1.txt"
                fi
        else
                echo "`basename $0`: no help for $1" 1>&2
@@ -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@";;