Sync with maint
[gitweb.git] / contrib / completion / git-completion.bash
index eae9dce590e0000eb93e441106ef6538c07e86cc..087771bb89d05b0353f6759cfd03da3a953a798b 100644 (file)
@@ -665,8 +665,8 @@ __git_list_porcelain_commands ()
                checkout-index)   : plumbing;;
                commit-tree)      : plumbing;;
                count-objects)    : infrequent;;
-               credential-cache) : credentials helper;;
-               credential-store) : credentials helper;;
+               credential)       : credentials;;
+               credential-*)     : credentials helper;;
                cvsexportcommit)  : export;;
                cvsimport)        : import;;
                cvsserver)        : daemon;;
@@ -735,35 +735,29 @@ __git_list_porcelain_commands ()
 __git_porcelain_commands=
 __git_compute_porcelain_commands ()
 {
-       __git_compute_all_commands
        test -n "$__git_porcelain_commands" ||
        __git_porcelain_commands=$(__git_list_porcelain_commands)
 }
 
-__git_pretty_aliases ()
+# Lists all set config variables starting with the given section prefix,
+# with the prefix removed.
+__git_get_config_variables ()
 {
-       local i IFS=$'\n'
-       for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
-               case "$i" in
-               pretty.*)
-                       i="${i#pretty.}"
-                       echo "${i/ */}"
-                       ;;
-               esac
+       local section="$1" i IFS=$'\n'
+       for i in $(git --git-dir="$(__gitdir)" config --get-regexp "^$section\..*" 2>/dev/null); do
+               i="${i#$section.}"
+               echo "${i/ */}"
        done
 }
 
+__git_pretty_aliases ()
+{
+       __git_get_config_variables "pretty"
+}
+
 __git_aliases ()
 {
-       local i IFS=$'\n'
-       for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
-               case "$i" in
-               alias.*)
-                       i="${i#alias.}"
-                       echo "${i/ */}"
-                       ;;
-               esac
-       done
+       __git_get_config_variables "alias"
 }
 
 # __git_aliased_command requires 1 argument
@@ -1114,7 +1108,7 @@ _git_commit ()
 
        case "$cur" in
        --cleanup=*)
-               __gitcomp "default strip verbatim whitespace
+               __gitcomp "default scissors strip verbatim whitespace
                        " "" "${cur##--cleanup=}"
                return
                ;;
@@ -1673,7 +1667,10 @@ _git_push ()
 _git_rebase ()
 {
        local dir="$(__gitdir)"
-       if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
+       if [ -f "$dir"/rebase-merge/interactive ]; then
+               __gitcomp "--continue --skip --abort --edit-todo"
+               return
+       elif [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
                __gitcomp "--continue --skip --abort"
                return
        fi
@@ -2123,6 +2120,7 @@ _git_config ()
                http.noEPSV
                http.postBuffer
                http.proxy
+               http.sslCipherList
                http.sslCAInfo
                http.sslCAPath
                http.sslCert
@@ -2260,12 +2258,7 @@ _git_remote ()
                __git_complete_remote_or_refspec
                ;;
        update)
-               local i c='' IFS=$'\n'
-               for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
-                       i="${i#remotes.}"
-                       c="$c ${i/ */}"
-               done
-               __gitcomp "$c"
+               __gitcomp "$(__git_get_config_variables "remotes")"
                ;;
        *)
                ;;
@@ -2292,6 +2285,11 @@ _git_reset ()
 
 _git_revert ()
 {
+       local dir="$(__gitdir)"
+       if [ -f "$dir"/REVERT_HEAD ]; then
+               __gitcomp "--continue --quit --abort"
+               return
+       fi
        case "$cur" in
        --*)
                __gitcomp "--edit --mainline --no-edit --no-commit --signoff"