Merge branch 'sg/completion-commit-cleanup'
authorJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2015 19:21:51 +0000 (12:21 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2015 19:21:51 +0000 (12:21 -0700)
* sg/completion-commit-cleanup:
completion: teach 'scissors' mode to 'git commit --cleanup='

1  2 
contrib/completion/git-completion.bash
index 3c00acda630b0baadd06123381f0ae3cb7d7d1c1,fa7ea48592860326a59fcc75e2e1ac5b122c0fff..c97c648d7e07fe9eeea1b1afff1ce55ac730cf4f
  #
  # 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 ;;
@@@ -186,7 -180,7 +186,7 @@@ f
  
  __gitcompappend ()
  {
 -      local i=${#COMPREPLY[@]}
 +      local i=${#COMPREPLY[@]}
        for x in $1; do
                if [[ "$x" == "$3"* ]]; then
                        COMPREPLY[i++]="$2$x$4"
@@@ -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 ()
@@@ -665,8 -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;;
  __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
@@@ -775,10 -781,6 +775,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
@@@ -971,7 -973,7 +971,7 @@@ _git_branch (
  
        case "$cur" in
        --set-upstream-to=*)
 -              __gitcomp "$(__git_refs)" "" "${cur##--set-upstream-to=}"
 +              __gitcomp_nl "$(__git_refs)" "" "${cur##--set-upstream-to=}"
                ;;
        --*)
                __gitcomp "
@@@ -1039,7 -1041,7 +1039,7 @@@ _git_checkout (
  
  _git_cherry ()
  {
 -      __gitcomp "$(__git_refs)"
 +      __gitcomp_nl "$(__git_refs)"
  }
  
  _git_cherry_pick ()
@@@ -1108,7 -1110,7 +1108,7 @@@ _git_commit (
  
        case "$cur" in
        --cleanup=*)
-               __gitcomp "default strip verbatim whitespace
+               __gitcomp "default scissors strip verbatim whitespace
                        " "" "${cur##--cleanup=}"
                return
                ;;
@@@ -1163,8 -1165,8 +1163,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
@@@ -1195,7 -1197,7 +1195,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 ()
@@@ -1296,7 -1298,7 +1296,7 @@@ _git_gitk (
  }
  
  __git_match_ctag() {
 -      awk "/^${1////\\/}/ { print \$1 }" "$2"
 +      awk "/^${1//\//\\/}/ { print \$1 }" "$2"
  }
  
  _git_grep ()
@@@ -1416,7 -1418,7 +1416,7 @@@ __git_log_gitk_options=
  # Options that go well for log and shortlog (not gitk)
  __git_log_shortlog_options="
        --author= --committer= --grep=
 -      --all-match
 +      --all-match --invert-grep
  "
  
  __git_log_pretty_formats="oneline short medium full fuller email raw format:"
@@@ -1442,7 -1444,7 +1442,7 @@@ _git_log (
                return
                ;;
        --decorate=*)
 -              __gitcomp "long short" "" "${cur##--decorate=}"
 +              __gitcomp "full short no" "" "${cur##--decorate=}"
                return
                ;;
        --*)
                        --abbrev-commit --abbrev=
                        --relative-date --date=
                        --pretty= --format= --oneline
 +                      --show-signature
                        --cherry-pick
                        --graph
                        --decorate --decorate=
@@@ -1610,33 -1611,12 +1610,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
                ;;
@@@ -1684,7 -1659,6 +1684,7 @@@ _git_rebase (
                        --committer-date-is-author-date --ignore-date
                        --ignore-whitespace --whitespace=
                        --autosquash --fork-point --no-fork-point
 +                      --autostash
                        "
  
                return
@@@ -1867,10 -1841,6 +1867,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
                http.noEPSV
                http.postBuffer
                http.proxy
 +              http.sslCipherList
                http.sslCAInfo
                http.sslCAPath
                http.sslCert
                pull.octopus
                pull.twohead
                push.default
 +              push.followTags
                rebase.autosquash
                rebase.stat
                receive.autogc
@@@ -2255,7 -2222,12 +2255,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")"
                ;;
        *)
                ;;
@@@ -2282,11 -2254,6 +2282,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"
@@@ -2341,7 -2308,6 +2341,7 @@@ _git_show (
                ;;
        --*)
                __gitcomp "--pretty= --format= --abbrev-commit --oneline
 +                      --show-signature
                        $__git_diff_common_options
                        "
                return
@@@ -2547,16 -2513,6 +2547,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 ()