Merge branch 'js/completion-ctags-pattern-substitution-fix' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 27 Mar 2015 20:00:17 +0000 (13:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 27 Mar 2015 20:00:18 +0000 (13:00 -0700)
The code that reads from the ctags file in the completion script
(in contrib/) did not spell ${param/pattern/string} substitution
correctly, which happened to work with bash but not with zsh.

* js/completion-ctags-pattern-substitution-fix:
contrib/completion: escape the forward slash in __git_match_ctag

1  2 
contrib/completion/git-completion.bash
index b8929084d079ef29987f7074dfb926f923b7697e,72a31827e1c4cd0c5d488b3bf51716ec5e0969c5..485619c2603e15222605bd3f19fa78bd2001dc5b
  #
  # To use these routines:
  #
 -#    1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
 +#    1) Copy this file to somewhere (e.g. ~/.git-completion.bash).
  #    2) Add the following line to your .bashrc/.zshrc:
 -#        source ~/.git-completion.sh
 +#        source ~/.git-completion.bash
  #    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 ;;
@@@ -281,12 -275,16 +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
  }
  
  
@@@ -384,8 -382,7 +384,8 @@@ __git_refs (
                ;;
        *)
                echo "HEAD"
 -              git for-each-ref --format="%(refname:short)" -- "refs/remotes/$dir/" | sed -e "s#^$dir/##"
 +              git for-each-ref --format="%(refname:short)" -- \
 +                      "refs/remotes/$dir/" 2>/dev/null | sed -e "s#^$dir/##"
                ;;
        esac
  }
@@@ -411,9 -408,12 +411,9 @@@ __git_refs_remotes (
  
  __git_remotes ()
  {
 -      local i IFS=$'\n' d="$(__gitdir)"
 +      local d="$(__gitdir)"
        test -d "$d/remotes" && ls -1 "$d/remotes"
 -      for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
 -              i="${i#remote.}"
 -              echo "${i/.url*/}"
 -      done
 +      git --git-dir="$d" remote
  }
  
  __git_list_merge_strategies ()
@@@ -516,7 -516,7 +516,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 ()
@@@ -781,10 -781,6 +781,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
@@@ -1169,8 -1165,8 +1169,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
@@@ -1201,7 -1197,7 +1201,7 @@@ _git_diff (
  }
  
  __git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
 -                      tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
 +                      tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc codecompare
  "
  
  _git_difftool ()
@@@ -1302,7 -1298,7 +1302,7 @@@ _git_gitk (
  }
  
  __git_match_ctag() {
-       awk "/^${1////\\/}/ { print \$1 }" "$2"
+       awk "/^${1//\//\\/}/ { print \$1 }" "$2"
  }
  
  _git_grep ()
@@@ -1461,7 -1457,6 +1461,7 @@@ _git_log (
                        --abbrev-commit --abbrev=
                        --relative-date --date=
                        --pretty= --format= --oneline
 +                      --show-signature
                        --cherry-pick
                        --graph
                        --decorate --decorate=
@@@ -1616,33 -1611,12 +1616,33 @@@ _git_pull (
  
  __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 "$__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
 -                      --recurse-submodules=
 +                      --force-with-lease --force-with-lease= --recurse-submodules=
                "
                return
                ;;
@@@ -1690,7 -1659,6 +1690,7 @@@ _git_rebase (
                        --committer-date-is-author-date --ignore-date
                        --ignore-whitespace --whitespace=
                        --autosquash --fork-point --no-fork-point
 +                      --autostash
                        "
  
                return
@@@ -1873,10 -1841,6 +1873,10 @@@ _git_config (
                __gitcomp "$__git_send_email_suppresscc_options"
                return
                ;;
 +      sendemail.transferencoding)
 +              __gitcomp "7bit 8bit quoted-printable base64"
 +              return
 +              ;;
        --get|--get-all|--unset|--unset-all)
                __gitcomp_nl "$(__git_config_get_set_variables)"
                return
                color.status.changed
                color.status.header
                color.status.nobranch
 +              color.status.unmerged
                color.status.untracked
                color.status.updated
                color.ui
@@@ -2345,7 -2308,6 +2345,7 @@@ _git_show (
                ;;
        --*)
                __gitcomp "--pretty= --format= --abbrev-commit --oneline
 +                      --show-signature
                        $__git_diff_common_options
                        "
                return
@@@ -2551,16 -2513,6 +2551,16 @@@ _git_tag (
                __gitcomp_nl "$(__git_refs)"
                ;;
        esac
 +
 +      case "$cur" in
 +      --*)
 +              __gitcomp "
 +                      --list --delete --verify --annotate --message --file
 +                      --sign --cleanup --local-user --force --column --sort
 +                      --contains --points-at
 +                      "
 +              ;;
 +      esac
  }
  
  _git_whatchanged ()