Merge branch 'jc/completion-no-chdir'
authorJunio C Hamano <gitster@pobox.com>
Thu, 16 Oct 2014 21:16:49 +0000 (14:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Oct 2014 21:16:49 +0000 (14:16 -0700)
* jc/completion-no-chdir:
completion: use "git -C $there" instead of (cd $there && git ...)

1  2 
contrib/completion/git-completion.bash
index 2ed230a861248f510e8e9d4597faef6f14ffd552,607792548122eabf014ab696080e0e99c69e8078..d548e99ebc213cc107b61acbdafa065bbb46dc30
@@@ -1,3 -1,5 +1,3 @@@
 -#!bash
 -#
  # bash/zsh completion support for core Git.
  #
  # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
  #        source ~/.git-completion.sh
  #    3) Consider changing your PS1 to also show the current branch,
  #       see git-prompt.sh for details.
 +#
 +# If you use complex aliases of form '!f() { ... }; f', you can use the null
 +# command ':' as the first command in the function body to declare the desired
 +# completion style.  For example '!f() { : git commit ; ... }; f' will
 +# tell the completion to use commit completion.  This also works with aliases
 +# of form "!sh -c '...'".  For example, "!sh -c ': git commit ; ... '".
  
  case "$COMP_WORDBREAKS" in
  *:*) : great ;;
@@@ -184,9 -180,9 +184,9 @@@ _get_comp_words_by_ref (
  }
  fi
  
 -__gitcompadd ()
 +__gitcompappend ()
  {
 -      local i=0
 +      local i=${#COMPREPLY[@]}
        for x in $1; do
                if [[ "$x" == "$3"* ]]; then
                        COMPREPLY[i++]="$2$x$4"
        done
  }
  
 +__gitcompadd ()
 +{
 +      COMPREPLY=()
 +      __gitcompappend "$@"
 +}
 +
  # Generates completion reply, appending a space to possible completion words,
  # if necessary.
  # It accepts 1 to 4 arguments:
@@@ -230,14 -220,6 +230,14 @@@ __gitcomp (
        esac
  }
  
 +# Variation of __gitcomp_nl () that appends to the existing list of
 +# completion candidates, COMPREPLY.
 +__gitcomp_nl_append ()
 +{
 +      local IFS=$'\n'
 +      __gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }"
 +}
 +
  # Generates completion reply from newline-separated possible completion words
  # by appending a space to all of them.
  # It accepts 1 to 4 arguments:
  #    appended.
  __gitcomp_nl ()
  {
 -      local IFS=$'\n'
 -      __gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
 +      COMPREPLY=()
 +      __gitcomp_nl_append "$@"
  }
  
  # Generates completion reply with compgen from newline-separated possible
@@@ -281,16 -263,12 +281,12 @@@ __gitcomp_file (
  # argument, and using the options specified in the second argument.
  __git_ls_files_helper ()
  {
-       (
-               test -n "${CDPATH+set}" && unset CDPATH
-               cd "$1"
-               if [ "$2" == "--committable" ]; then
-                       git diff-index --name-only --relative HEAD
-               else
-                       # NOTE: $2 is not quoted in order to support multiple options
-                       git ls-files --exclude-standard $2
-               fi
-       ) 2>/dev/null
+       if [ "$2" == "--committable" ]; then
+               git -C "$1" diff-index --name-only --relative HEAD
+       else
+               # NOTE: $2 is not quoted in order to support multiple options
+               git -C "$1" ls-files --exclude-standard $2
+       fi 2>/dev/null
  }
  
  
@@@ -522,7 -500,7 +518,7 @@@ __git_complete_index_file (
                ;;
        esac
  
-       __gitcomp_file "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_"
+       __gitcomp_file "$(__git_index_files "$1" ${pfx:+"$pfx"})" "$pfx" "$cur_"
  }
  
  __git_complete_file ()
@@@ -691,6 -669,7 +687,6 @@@ __git_list_porcelain_commands (
                index-pack)       : plumbing;;
                init-db)          : deprecated;;
                local-fetch)      : plumbing;;
 -              lost-found)       : infrequent;;
                ls-files)         : plumbing;;
                ls-remote)        : plumbing;;
                ls-tree)          : plumbing;;
                pack-refs)        : plumbing;;
                parse-remote)     : plumbing;;
                patch-id)         : plumbing;;
 -              peek-remote)      : plumbing;;
                prune)            : plumbing;;
                prune-packed)     : plumbing;;
                quiltimport)      : import;;
                read-tree)        : plumbing;;
                receive-pack)     : plumbing;;
                remote-*)         : transport;;
 -              repo-config)      : deprecated;;
                rerere)           : plumbing;;
                rev-list)         : plumbing;;
                rev-parse)        : plumbing;;
                ssh-*)            : transport;;
                stripspace)       : plumbing;;
                symbolic-ref)     : plumbing;;
 -              tar-tree)         : deprecated;;
                unpack-file)      : plumbing;;
                unpack-objects)   : plumbing;;
                update-index)     : plumbing;;
@@@ -787,10 -769,6 +783,10 @@@ __git_aliased_command (
                -*)     : option ;;
                *=*)    : setting env ;;
                git)    : git itself ;;
 +              \(\))   : skip parens of shell function definition ;;
 +              {)      : skip start of shell helper function ;;
 +              :)      : skip null command ;;
 +              \'*)    : skip opening quote after sh -c ;;
                *)
                        echo "$word"
                        return
@@@ -1175,8 -1153,8 +1171,8 @@@ __git_diff_common_options="--stat --num
                        --full-index --binary --abbrev --diff-filter=
                        --find-copies-harder
                        --text --ignore-space-at-eol --ignore-space-change
 -                      --ignore-all-space --exit-code --quiet --ext-diff
 -                      --no-ext-diff
 +                      --ignore-all-space --ignore-blank-lines --exit-code
 +                      --quiet --ext-diff --no-ext-diff
                        --no-prefix --src-prefix= --dst-prefix=
                        --inter-hunk-context=
                        --patience --histogram --minimal
@@@ -1231,20 -1209,14 +1227,20 @@@ _git_difftool (
        __git_complete_revlist_file
  }
  
 +__git_fetch_recurse_submodules="yes on-demand no"
 +
  __git_fetch_options="
        --quiet --verbose --append --upload-pack --force --keep --depth=
 -      --tags --no-tags --all --prune --dry-run
 +      --tags --no-tags --all --prune --dry-run --recurse-submodules=
  "
  
  _git_fetch ()
  {
        case "$cur" in
 +      --recurse-submodules=*)
 +              __gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
 +              return
 +              ;;
        --*)
                __gitcomp "$__git_fetch_options"
                return
@@@ -1467,7 -1439,6 +1463,7 @@@ _git_log (
                        --abbrev-commit --abbrev=
                        --relative-date --date=
                        --pretty= --format= --oneline
 +                      --show-signature
                        --cherry-pick
                        --graph
                        --decorate --decorate=
        __git_complete_revlist
  }
  
 +# Common merge options shared by git-merge(1) and git-pull(1).
  __git_merge_options="
        --no-commit --no-stat --log --no-log --squash --strategy
        --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
 +      --verify-signatures --no-verify-signatures --gpg-sign
 +      --quiet --verbose --progress --no-progress
  "
  
  _git_merge ()
  
        case "$cur" in
        --*)
 -              __gitcomp "$__git_merge_options"
 +              __gitcomp "$__git_merge_options
 +                      --rerere-autoupdate --no-rerere-autoupdate --abort"
                return
        esac
        __gitcomp_nl "$(__git_refs)"
@@@ -1520,12 -1487,6 +1516,12 @@@ _git_mergetool (
  
  _git_merge_base ()
  {
 +      case "$cur" in
 +      --*)
 +              __gitcomp "--octopus --independent --is-ancestor --fork-point"
 +              return
 +              ;;
 +      esac
        __gitcomp_nl "$(__git_refs)"
  }
  
@@@ -1604,10 -1565,6 +1600,10 @@@ _git_pull (
        __git_complete_strategy && return
  
        case "$cur" in
 +      --recurse-submodules=*)
 +              __gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
 +              return
 +              ;;
        --*)
                __gitcomp "
                        --rebase --no-rebase
        __git_complete_remote_or_refspec
  }
  
 +__git_push_recurse_submodules="check on-demand"
 +
 +__git_complete_force_with_lease ()
 +{
 +      local cur_=$1
 +
 +      case "$cur_" in
 +      --*=)
 +              ;;
 +      *:*)
 +              __gitcomp_nl "$(__git_refs)" "" "${cur_#*:}"
 +              ;;
 +      *)
 +              __gitcomp_nl "$(__git_refs)" "" "$cur_"
 +              ;;
 +      esac
 +}
 +
  _git_push ()
  {
        case "$prev" in
        --repo)
                __gitcomp_nl "$(__git_remotes)"
                return
 +              ;;
 +      --recurse-submodules)
 +              __gitcomp "$__git_push_recurse_submodules"
 +              return
 +              ;;
        esac
        case "$cur" in
        --repo=*)
                __gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
                return
                ;;
 +      --recurse-submodules=*)
 +              __gitcomp "$__git_push_recurse_submodules" "" "${cur##--recurse-submodules=}"
 +              return
 +              ;;
 +      --force-with-lease=*)
 +              __git_complete_force_with_lease "${cur##--force-with-lease=}"
 +              return
 +              ;;
        --*)
                __gitcomp "
                        --all --mirror --tags --dry-run --force --verbose
 +                      --quiet --prune --delete --follow-tags
                        --receive-pack= --repo= --set-upstream
 +                      --force-with-lease --force-with-lease= --recurse-submodules=
                "
                return
                ;;
@@@ -1695,7 -1619,7 +1691,7 @@@ _git_rebase (
                        --preserve-merges --stat --no-stat
                        --committer-date-is-author-date --ignore-date
                        --ignore-whitespace --whitespace=
 -                      --autosquash
 +                      --autosquash --fork-point --no-fork-point
                        "
  
                return
@@@ -1905,7 -1829,6 +1901,7 @@@ _git_config (
        branch.*)
                local pfx="${cur%.*}." cur_="${cur#*.}"
                __gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
 +              __gitcomp_nl_append $'autosetupmerge\nautosetuprebase\n' "$pfx" "$cur_"
                return
                ;;
        guitool.*.*)
        remote.*)
                local pfx="${cur%.*}." cur_="${cur#*.}"
                __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
 +              __gitcomp_nl_append "pushdefault" "$pfx" "$cur_"
                return
                ;;
        url.*.*)
                fetch.unpackLimit
                format.attach
                format.cc
 +              format.coverLetter
                format.headers
                format.numbered
                format.pretty
@@@ -2345,7 -2266,6 +2341,7 @@@ _git_show (
                ;;
        --*)
                __gitcomp "--pretty= --format= --abbrev-commit --oneline
 +                      --show-signature
                        $__git_diff_common_options
                        "
                return
@@@ -2606,7 -2526,6 +2602,7 @@@ __git_main (
  
        local expansion=$(__git_aliased_command "$command")
        if [ -n "$expansion" ]; then
 +              words[1]=$expansion
                completion_func="_git_${expansion//-/_}"
                declare -f $completion_func >/dev/null && $completion_func
        fi