contrib/bash_completion
changeset 2039 0c438fd25e6e
parent 2035 107dc72880f8
child 2041 077a2da7f1de
--- a/contrib/bash_completion	Sun Apr 02 18:16:06 2006 +0200
+++ b/contrib/bash_completion	Sun Apr 02 18:20:52 2006 +0200
@@ -99,13 +99,38 @@
 	return
     fi
 
-    # canonicalize command name
-    cmd=$("$hg" -q help "$cmd" 2>/dev/null | sed -e 's/^hg //; s/ .*//; 1q')
+    # try to generate completion candidates for whatever command the user typed
+    local help
+    local canonical=0
+    if _hg_command_specific; then
+	return
+    fi
 
-    if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" = --rev ]; then
-	_hg_tags
+    # canonicalize the command name and try again
+    help=$("$hg" help "$cmd" 2>/dev/null)
+    if [ $? -ne 0 ]; then
+	# Probably either the command doesn't exist or it's ambiguous
 	return
     fi
+    cmd=${help#hg }
+    cmd=${cmd%%[$' \n']*}
+    canonical=1
+    _hg_command_specific
+}
+
+_hg_command_specific()
+{
+    if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
+	if [ $canonical = 1 ]; then
+	    _hg_tags
+	    return 0
+	elif [[ status != "$cmd"* ]]; then
+	    _hg_tags
+	    return 0
+	else
+	    return 1
+	fi
+    fi
 
     case "$cmd" in
 	help)
@@ -152,8 +177,12 @@
 	debugdata)
 	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.d" -- "$cur"))
 	;;
+	*)
+	    return 1
+	;;
     esac
 
+    return 0
 }
 
 complete -o bashdefault -o default -F _hg hg 2>/dev/null \