Code

completion: support full refs from remote repositories
authorSZEDER Gábor <szeder@ira.uka.de>
Sat, 8 Oct 2011 14:54:39 +0000 (16:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Oct 2011 21:38:23 +0000 (14:38 -0700)
When the __git_refs() completion helper function lists refs from a
local repository, it usually lists the refs' short name, except when
it needs to provide completion for words starting with refs, because
in that case it lists full ref names, see 608efb87 (bash: complete
full refs, 2008-11-28).

Add the same functionality to the code path dealing with remote
repositories, too.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-completion.bash

index 5632c8862775a5aacd5ac270890c6e96b31d1358..8867e092b6a9860ef952d059aed8e28e7038e29d 100755 (executable)
@@ -616,14 +616,27 @@ __git_refs ()
                fi
                return
        fi
-       git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null | \
-       while read hash i; do
-               case "$i" in
-               *^{}) ;;
-               refs/*) echo "${i#refs/*/}" ;;
-               *) echo "$i" ;;
-               esac
-       done
+       case "$cur" in
+       refs|refs/*)
+               git ls-remote "$dir" "$cur*" 2>/dev/null | \
+               while read hash i; do
+                       case "$i" in
+                       *^{}) ;;
+                       *) echo "$i" ;;
+                       esac
+               done
+               ;;
+       *)
+               git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null | \
+               while read hash i; do
+                       case "$i" in
+                       *^{}) ;;
+                       refs/*) echo "${i#refs/*/}" ;;
+                       *) echo "$i" ;;
+                       esac
+               done
+               ;;
+       esac
 }
 
 # __git_refs2 requires 1 argument (to pass to __git_refs)