Update git-completion for new 'remote rm' option
[gitweb.git] / contrib / completion / git-completion.bash
index 8f27aa9a133fdd601a90e10ee280dfa55728bc09..0d33f9a3dc9d5a593ce2691ab850ba1e38aa32de 100755 (executable)
@@ -114,6 +114,27 @@ __git_heads ()
        done
 }
 
+__git_tags ()
+{
+       local cmd i is_hash=y dir="$(__gitdir "$1")"
+       if [ -d "$dir" ]; then
+               for i in $(git --git-dir="$dir" \
+                       for-each-ref --format='%(refname)' \
+                       refs/tags ); do
+                       echo "${i#refs/tags/}"
+               done
+               return
+       fi
+       for i in $(git-ls-remote "$1" 2>/dev/null); do
+               case "$is_hash,$i" in
+               y,*) is_hash=n ;;
+               n,*^{}) is_hash=y ;;
+               n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
+               n,*) is_hash=y; echo "$i" ;;
+               esac
+       done
+}
+
 __git_refs ()
 {
        local cmd i is_hash=y dir="$(__gitdir "$1")"
@@ -270,7 +291,7 @@ __git_commands ()
        for i in $(git help -a|egrep '^ ')
        do
                case $i in
-               add--interactive) : plumbing;;
+               *--*)             : helper pattern;;
                applymbox)        : ask gittus;;
                applypatch)       : ask gittus;;
                archimport)       : import;;
@@ -278,7 +299,6 @@ __git_commands ()
                check-attr)       : plumbing;;
                check-ref-format) : plumbing;;
                commit-tree)      : plumbing;;
-               convert-objects)  : plumbing;;
                cvsexportcommit)  : export;;
                cvsimport)        : import;;
                cvsserver)        : daemon;;
@@ -288,7 +308,6 @@ __git_commands ()
                diff-tree)        : plumbing;;
                fast-import)      : import;;
                fsck-objects)     : plumbing;;
-               fetch--tool)      : plumbing;;
                fetch-pack)       : plumbing;;
                fmt-merge-msg)    : plumbing;;
                for-each-ref)     : plumbing;;
@@ -314,7 +333,7 @@ __git_commands ()
                read-tree)        : plumbing;;
                receive-pack)     : plumbing;;
                reflog)           : plumbing;;
-               repo-config)      : plumbing;;
+               repo-config)      : deprecated;;
                rerere)           : plumbing;;
                rev-list)         : plumbing;;
                rev-parse)        : plumbing;;
@@ -326,7 +345,6 @@ __git_commands ()
                ssh-*)            : transport;;
                stripspace)       : plumbing;;
                svn)              : import export;;
-               svnimport)        : import;;
                symbolic-ref)     : plumbing;;
                tar-tree)         : deprecated;;
                unpack-file)      : plumbing;;
@@ -525,8 +543,27 @@ _git_commit ()
        COMPREPLY=()
 }
 
+_git_describe ()
+{
+       __gitcomp "$(__git_refs)"
+}
+
 _git_diff ()
 {
+       local cur="${COMP_WORDS[COMP_CWORD]}"
+       case "$cur" in
+       --*)
+               __gitcomp "--cached --stat --numstat --shortstat --summary
+                       --patch-with-stat --name-only --name-status --color
+                       --no-color --color-words --no-renames --check
+                       --full-index --binary --abbrev --diff-filter
+                       --find-copies-harder --pickaxe-all --pickaxe-regex
+                       --text --ignore-space-at-eol --ignore-space-change
+                       --ignore-all-space --exit-code --quiet --ext-diff
+                       --no-ext-diff"
+               return
+               ;;
+       esac
        __git_complete_file
 }
 
@@ -636,6 +673,7 @@ _git_log ()
                        --all-match
                        --pretty= --name-status --name-only --raw
                        --not --all
+                       --left-right --cherry-pick
                        "
                return
                ;;
@@ -932,18 +970,18 @@ _git_remote ()
        while [ $c -lt $COMP_CWORD ]; do
                i="${COMP_WORDS[c]}"
                case "$i" in
-               add|show|prune|update) command="$i"; break ;;
+               add|rm|show|prune|update) command="$i"; break ;;
                esac
                c=$((++c))
        done
 
        if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
-               __gitcomp "add show prune update"
+               __gitcomp "add rm show prune update"
                return
        fi
 
        case "$command" in
-       show|prune)
+       rm|show|prune)
                __gitcomp "$(__git_remotes)"
                ;;
        update)
@@ -1019,6 +1057,65 @@ _git_stash ()
        __gitcomp 'list show apply clear'
 }
 
+_git_submodule ()
+{
+       local i c=1 command
+       while [ $c -lt $COMP_CWORD ]; do
+               i="${COMP_WORDS[c]}"
+               case "$i" in
+               add|status|init|update) command="$i"; break ;;
+               esac
+               c=$((++c))
+       done
+
+       if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
+               local cur="${COMP_WORDS[COMP_CWORD]}"
+               case "$cur" in
+               --*)
+                       __gitcomp "--quiet --cached"
+                       ;;
+               *)
+                       __gitcomp "add status init update"
+                       ;;
+               esac
+               return
+       fi
+}
+
+_git_tag ()
+{
+       local i c=1 f=0
+       while [ $c -lt $COMP_CWORD ]; do
+               i="${COMP_WORDS[c]}"
+               case "$i" in
+               -d|-v)
+                       __gitcomp "$(__git_tags)"
+                       return
+                       ;;
+               -f)
+                       f=1
+                       ;;
+               esac
+               c=$((++c))
+       done
+
+       case "${COMP_WORDS[COMP_CWORD-1]}" in
+       -m|-F)
+               COMPREPLY=()
+               ;;
+       -*|tag|git-tag)
+               if [ $f = 1 ]; then
+                       __gitcomp "$(__git_tags)"
+               else
+                       COMPREPLY=()
+               fi
+               ;;
+       *)
+               __gitcomp "$(__git_refs)"
+               ;;
+       esac
+}
+
 _git ()
 {
        local i c=1 command __git_dir
@@ -1065,6 +1162,7 @@ _git ()
        cherry-pick) _git_cherry_pick ;;
        commit)      _git_commit ;;
        config)      _git_config ;;
+       describe)    _git_describe ;;
        diff)        _git_diff ;;
        fetch)       _git_fetch ;;
        format-patch) _git_format_patch ;;
@@ -1084,6 +1182,8 @@ _git ()
        show)        _git_show ;;
        show-branch) _git_log ;;
        stash)       _git_stash ;;
+       submodule)   _git_submodule ;;
+       tag)         _git_tag ;;
        whatchanged) _git_log ;;
        *)           COMPREPLY=() ;;
        esac
@@ -1112,6 +1212,7 @@ complete -o default -o nospace -F _git_checkout git-checkout
 complete -o default -o nospace -F _git_cherry git-cherry
 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
 complete -o default -o nospace -F _git_commit git-commit
+complete -o default -o nospace -F _git_describe git-describe
 complete -o default -o nospace -F _git_diff git-diff
 complete -o default -o nospace -F _git_fetch git-fetch
 complete -o default -o nospace -F _git_format_patch git-format-patch
@@ -1131,7 +1232,9 @@ complete -o default -o nospace -F _git_reset git-reset
 complete -o default -o nospace -F _git_shortlog git-shortlog
 complete -o default -o nospace -F _git_show git-show
 complete -o default -o nospace -F _git_stash git-stash
+complete -o default -o nospace -F _git_submodule git-submodule
 complete -o default -o nospace -F _git_log git-show-branch
+complete -o default -o nospace -F _git_tag git-tag
 complete -o default -o nospace -F _git_log git-whatchanged
 
 # The following are necessary only for Cygwin, and only are needed
@@ -1145,6 +1248,7 @@ complete -o default -o nospace -F _git git.exe
 complete -o default -o nospace -F _git_branch git-branch.exe
 complete -o default -o nospace -F _git_bundle git-bundle.exe
 complete -o default -o nospace -F _git_cherry git-cherry.exe
+complete -o default -o nospace -F _git_describe git-describe.exe
 complete -o default -o nospace -F _git_diff git-diff.exe
 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
 complete -o default -o nospace -F _git_log git-log.exe
@@ -1156,5 +1260,6 @@ complete -o default -o nospace -F _git_config git-config
 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
 complete -o default -o nospace -F _git_show git-show.exe
 complete -o default -o nospace -F _git_log git-show-branch.exe
+complete -o default -o nospace -F _git_tag git-tag.exe
 complete -o default -o nospace -F _git_log git-whatchanged.exe
 fi