Code

Bash completion support for remotes in .git/config.
authorShawn O. Pearce <spearce@spearce.org>
Sun, 5 Nov 2006 11:21:03 +0000 (06:21 -0500)
committerJunio C Hamano <junkio@cox.net>
Sun, 5 Nov 2006 21:36:32 +0000 (13:36 -0800)
Now that Git natively supports remote specifications within the
config file such as:

[remote "origin"]
url = ...

we should provide bash completion support "out of the box" for
these remotes, just like we do for the .git/remotes directory.

Also cleaned up the __git_aliases expansion to use the same form
of querying and filtering repo-config as this saves two fork/execs
in the middle of a user prompted completion.  Finally also forced
the variable 'word' to be local within __git_aliased_command.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
contrib/completion/git-completion.bash

index 926638d5ffe4fd7c5c5ca7df9219c52dc639db73..5f1be46ba57c87772c1115191b7949999b7bff8f 100755 (executable)
@@ -59,12 +59,21 @@ __git_refs2 ()
 
 __git_remotes ()
 {
-       local i REVERTGLOB=$(shopt -p nullglob)
+       local i ngoff IFS=$'\n'
+       shopt -q nullglob || ngoff=1
        shopt -s nullglob
        for i in .git/remotes/*; do
                echo ${i#.git/remotes/}
        done
-       $REVERTGLOB
+       [ "$ngoff" ] && shopt -u nullglob
+       for i in $(git repo-config --list); do
+               case "$i" in
+               remote.*.url=*)
+                       i="${i#remote.}"
+                       echo "${i/.url=*/}"
+                       ;;
+               esac
+       done
 }
 
 __git_complete_file ()
@@ -103,13 +112,20 @@ __git_complete_file ()
 
 __git_aliases ()
 {
-       git repo-config --list | grep '^alias\.' \
-               | sed -e 's/^alias\.//' -e 's/=.*$//'
+       local i IFS=$'\n'
+       for i in $(git repo-config --list); do
+               case "$i" in
+               alias.*)
+                       i="${i#alias.}"
+                       echo "${i/=*/}"
+                       ;;
+               esac
+       done
 }
 
 __git_aliased_command ()
 {
-       local cmdline=$(git repo-config alias.$1)
+       local word cmdline=$(git repo-config --get "alias.$1")
        for word in $cmdline; do
                if [ "${word##-*}" ]; then
                        echo $word