Merge branch 'mr/complete-more-for-log-etc'
authorJunio C Hamano <gitster@pobox.com>
Mon, 7 Oct 2019 02:32:55 +0000 (11:32 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Oct 2019 02:32:55 +0000 (11:32 +0900)
Completion updates.

* mr/complete-more-for-log-etc:
  completion: add missing completions for log, diff, show

1  2 
contrib/completion/git-completion.bash

@@@ -340,7 -340,7 +340,7 @@@ __gitcomp (
                        c="$c${4-}"
                        if [[ $c == "$cur_"* ]]; then
                                case $c in
 -                              --*=*|*.) ;;
 +                              --*=|*.) ;;
                                *) c="$c " ;;
                                esac
                                COMPREPLY[i++]="${2-}$c"
                        c="$c${4-}"
                        if [[ $c == "$cur_"* ]]; then
                                case $c in
 -                              --*=*|*.) ;;
 +                              *=|*.) ;;
                                *) c="$c " ;;
                                esac
                                COMPREPLY[i++]="${2-}$c"
@@@ -524,7 -524,7 +524,7 @@@ __git_index_files (
                        # Even when a directory name itself does not contain
                        # any special characters, it will still be quoted if
                        # any of its (stripped) trailing path components do.
 -                      # Because of this we may have seen the same direcory
 +                      # Because of this we may have seen the same directory
                        # both quoted and unquoted.
                        if (p in paths)
                                # We have seen the same directory unquoted,
@@@ -1250,7 -1250,10 +1250,7 @@@ _git_archive (
                return
                ;;
        --*)
 -              __gitcomp "
 -                      --format= --list --verbose
 -                      --prefix= --remote= --exec= --output
 -                      "
 +              __gitcomp_builtin archive "--format= --list --verbose --prefix= --worktree-attributes"
                return
                ;;
        esac
@@@ -1358,9 -1361,7 +1358,9 @@@ _git_checkout (
        esac
  }
  
 -__git_cherry_pick_inprogress_options="--continue --quit --abort"
 +__git_sequencer_inprogress_options="--continue --quit --abort --skip"
 +
 +__git_cherry_pick_inprogress_options=$__git_sequencer_inprogress_options
  
  _git_cherry_pick ()
  {
@@@ -1398,18 -1399,7 +1398,18 @@@ _git_clean (
  
  _git_clone ()
  {
 +      case "$prev" in
 +      -c|--config)
 +              __git_complete_config_variable_name_and_value
 +              return
 +              ;;
 +      esac
        case "$cur" in
 +      --config=*)
 +              __git_complete_config_variable_name_and_value \
 +                      --cur="${cur##--config=}"
 +              return
 +              ;;
        --*)
                __gitcomp_builtin clone
                return
@@@ -1486,6 -1476,8 +1486,8 @@@ __git_diff_common_options="--stat --num
                        --dirstat-by-file= --cumulative
                        --diff-algorithm=
                        --submodule --submodule= --ignore-submodules
+                       --indent-heuristic --no-indent-heuristic
+                       --textconv --no-textconv
  "
  
  _git_diff ()
@@@ -1794,6 -1786,10 +1796,10 @@@ _git_log (
                __gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
                return
                ;;
+       --no-walk=*)
+               __gitcomp "sorted unsorted" "" "${cur##--no-walk=}"
+               return
+               ;;
        --*)
                __gitcomp "
                        $__git_log_common_options
                        $__git_log_gitk_options
                        --root --topo-order --date-order --reverse
                        --follow --full-diff
-                       --abbrev-commit --abbrev=
+                       --abbrev-commit --no-abbrev-commit --abbrev=
                        --relative-date --date=
                        --pretty= --format= --oneline
                        --show-signature
                        --cherry-mark
                        --cherry-pick
                        --graph
-                       --decorate --decorate=
+                       --decorate --decorate= --no-decorate
                        --walk-reflogs
+                       --no-walk --no-walk= --do-walk
                        --parents --children
+                       --expand-tabs --expand-tabs= --no-expand-tabs
+                       --patch
                        $merge
                        $__git_diff_common_options
                        --pickaxe-all --pickaxe-regex
@@@ -2014,18 -2013,15 +2023,18 @@@ _git_range_diff (
        __git_complete_revlist
  }
  
 +__git_rebase_inprogress_options="--continue --skip --abort --quit --show-current-patch"
 +__git_rebase_interactive_inprogress_options="$__git_rebase_inprogress_options --edit-todo"
 +
  _git_rebase ()
  {
        __git_find_repo_path
        if [ -f "$__git_repo_path"/rebase-merge/interactive ]; then
 -              __gitcomp "--continue --skip --abort --quit --edit-todo --show-current-patch"
 +              __gitcomp "$__git_rebase_interactive_inprogress_options"
                return
        elif [ -d "$__git_repo_path"/rebase-apply ] || \
             [ -d "$__git_repo_path"/rebase-merge ]; then
 -              __gitcomp "--continue --skip --abort --quit --show-current-patch"
 +              __gitcomp "$__git_rebase_inprogress_options"
                return
        fi
        __git_complete_strategy && return
                return
                ;;
        --*)
 -              __gitcomp "
 -                      --onto --merge --strategy --interactive
 -                      --rebase-merges --preserve-merges --stat --no-stat
 -                      --committer-date-is-author-date --ignore-date
 -                      --ignore-whitespace --whitespace=
 -                      --autosquash --no-autosquash
 -                      --fork-point --no-fork-point
 -                      --autostash --no-autostash
 -                      --verify --no-verify
 -                      --keep-empty --root --force-rebase --no-ff
 -                      --rerere-autoupdate
 -                      --exec
 -                      "
 +              __gitcomp_builtin rebase "" \
 +                      "$__git_rebase_interactive_inprogress_options"
  
                return
        esac
@@@ -2227,282 -2234,181 +2236,282 @@@ __git_config_vars
  __git_compute_config_vars ()
  {
        test -n "$__git_config_vars" ||
 -      __git_config_vars="$(git help --config-for-completion | sort | uniq)"
 +      __git_config_vars="$(git help --config-for-completion | sort -u)"
  }
  
 -_git_config ()
 +# Completes possible values of various configuration variables.
 +#
 +# Usage: __git_complete_config_variable_value [<option>]...
 +# --varname=<word>: The name of the configuration variable whose value is
 +#                   to be completed.  Defaults to the previous word on the
 +#                   command line.
 +# --cur=<word>: The current value to be completed.  Defaults to the current
 +#               word to be completed.
 +__git_complete_config_variable_value ()
  {
 -      local varname
 +      local varname="$prev" cur_="$cur"
 +
 +      while test $# != 0; do
 +              case "$1" in
 +              --varname=*)    varname="${1##--varname=}" ;;
 +              --cur=*)        cur_="${1##--cur=}" ;;
 +              *)              return 1 ;;
 +              esac
 +              shift
 +      done
  
        if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
 -              varname="${prev,,}"
 +              varname="${varname,,}"
        else
 -              varname="$(echo "$prev" |tr A-Z a-z)"
 +              varname="$(echo "$varname" |tr A-Z a-z)"
        fi
  
        case "$varname" in
        branch.*.remote|branch.*.pushremote)
 -              __gitcomp_nl "$(__git_remotes)"
 +              __gitcomp_nl "$(__git_remotes)" "" "$cur_"
                return
                ;;
        branch.*.merge)
 -              __git_complete_refs
 +              __git_complete_refs --cur="$cur_"
                return
                ;;
        branch.*.rebase)
 -              __gitcomp "false true merges preserve interactive"
 +              __gitcomp "false true merges preserve interactive" "" "$cur_"
                return
                ;;
        remote.pushdefault)
 -              __gitcomp_nl "$(__git_remotes)"
 +              __gitcomp_nl "$(__git_remotes)" "" "$cur_"
                return
                ;;
        remote.*.fetch)
 -              local remote="${prev#remote.}"
 +              local remote="${varname#remote.}"
                remote="${remote%.fetch}"
 -              if [ -z "$cur" ]; then
 +              if [ -z "$cur_" ]; then
                        __gitcomp_nl "refs/heads/" "" "" ""
                        return
                fi
 -              __gitcomp_nl "$(__git_refs_remotes "$remote")"
 +              __gitcomp_nl "$(__git_refs_remotes "$remote")" "" "$cur_"
                return
                ;;
        remote.*.push)
 -              local remote="${prev#remote.}"
 +              local remote="${varname#remote.}"
                remote="${remote%.push}"
                __gitcomp_nl "$(__git for-each-ref \
 -                      --format='%(refname):%(refname)' refs/heads)"
 +                      --format='%(refname):%(refname)' refs/heads)" "" "$cur_"
                return
                ;;
        pull.twohead|pull.octopus)
                __git_compute_merge_strategies
 -              __gitcomp "$__git_merge_strategies"
 -              return
 -              ;;
 -      color.branch|color.diff|color.interactive|\
 -      color.showbranch|color.status|color.ui)
 -              __gitcomp "always never auto"
 +              __gitcomp "$__git_merge_strategies" "" "$cur_"
                return
                ;;
        color.pager)
 -              __gitcomp "false true"
 +              __gitcomp "false true" "" "$cur_"
                return
                ;;
        color.*.*)
                __gitcomp "
                        normal black red green yellow blue magenta cyan white
                        bold dim ul blink reverse
 -                      "
 +                      " "" "$cur_"
 +              return
 +              ;;
 +      color.*)
 +              __gitcomp "false true always never auto" "" "$cur_"
                return
                ;;
        diff.submodule)
 -              __gitcomp "$__git_diff_submodule_formats"
 +              __gitcomp "$__git_diff_submodule_formats" "" "$cur_"
                return
                ;;
        help.format)
 -              __gitcomp "man info web html"
 +              __gitcomp "man info web html" "" "$cur_"
                return
                ;;
        log.date)
 -              __gitcomp "$__git_log_date_formats"
 +              __gitcomp "$__git_log_date_formats" "" "$cur_"
                return
                ;;
        sendemail.aliasfiletype)
 -              __gitcomp "mutt mailrc pine elm gnus"
 +              __gitcomp "mutt mailrc pine elm gnus" "" "$cur_"
                return
                ;;
        sendemail.confirm)
 -              __gitcomp "$__git_send_email_confirm_options"
 +              __gitcomp "$__git_send_email_confirm_options" "" "$cur_"
                return
                ;;
        sendemail.suppresscc)
 -              __gitcomp "$__git_send_email_suppresscc_options"
 +              __gitcomp "$__git_send_email_suppresscc_options" "" "$cur_"
                return
                ;;
        sendemail.transferencoding)
 -              __gitcomp "7bit 8bit quoted-printable base64"
 -              return
 -              ;;
 -      --get|--get-all|--unset|--unset-all)
 -              __gitcomp_nl "$(__git_config_get_set_variables)"
 +              __gitcomp "7bit 8bit quoted-printable base64" "" "$cur_"
                return
                ;;
        *.*)
                return
                ;;
        esac
 -      case "$cur" in
 -      --*)
 -              __gitcomp_builtin config
 -              return
 -              ;;
 +}
 +
 +# Completes configuration sections, subsections, variable names.
 +#
 +# Usage: __git_complete_config_variable_name [<option>]...
 +# --cur=<word>: The current configuration section/variable name to be
 +#               completed.  Defaults to the current word to be completed.
 +# --sfx=<suffix>: A suffix to be appended to each fully completed
 +#                 configuration variable name (but not to sections or
 +#                 subsections) instead of the default space.
 +__git_complete_config_variable_name ()
 +{
 +      local cur_="$cur" sfx
 +
 +      while test $# != 0; do
 +              case "$1" in
 +              --cur=*)        cur_="${1##--cur=}" ;;
 +              --sfx=*)        sfx="${1##--sfx=}" ;;
 +              *)              return 1 ;;
 +              esac
 +              shift
 +      done
 +
 +      case "$cur_" in
        branch.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 -              __gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
 +              __gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx"
                return
                ;;
        branch.*)
 -              local pfx="${cur%.*}." cur_="${cur#*.}"
 +              local pfx="${cur%.*}."
 +              cur_="${cur#*.}"
                __gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
 -              __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_"
 +              __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "$sfx"
                return
                ;;
        guitool.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
                __gitcomp "
                        argPrompt cmd confirm needsFile noConsole noRescan
                        prompt revPrompt revUnmerged title
 -                      " "$pfx" "$cur_"
 +                      " "$pfx" "$cur_" "$sfx"
                return
                ;;
        difftool.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 -              __gitcomp "cmd path" "$pfx" "$cur_"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
 +              __gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
                return
                ;;
        man.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 -              __gitcomp "cmd path" "$pfx" "$cur_"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
 +              __gitcomp "cmd path" "$pfx" "$cur_" "$sfx"
                return
                ;;
        mergetool.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 -              __gitcomp "cmd path trustExitCode" "$pfx" "$cur_"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
 +              __gitcomp "cmd path trustExitCode" "$pfx" "$cur_" "$sfx"
                return
                ;;
        pager.*)
 -              local pfx="${cur%.*}." cur_="${cur#*.}"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_#*.}"
                __git_compute_all_commands
 -              __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_"
 +              __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "$sfx"
                return
                ;;
        remote.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
                __gitcomp "
                        url proxy fetch push mirror skipDefaultUpdate
                        receivepack uploadpack tagOpt pushurl
 -                      " "$pfx" "$cur_"
 +                      " "$pfx" "$cur_" "$sfx"
                return
                ;;
        remote.*)
 -              local pfx="${cur%.*}." cur_="${cur#*.}"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_#*.}"
                __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
 -              __gitcomp_nl_append "pushDefault" "$pfx" "$cur_"
 +              __gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "$sfx"
                return
                ;;
        url.*.*)
 -              local pfx="${cur%.*}." cur_="${cur##*.}"
 -              __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_"
 +              local pfx="${cur_%.*}."
 +              cur_="${cur_##*.}"
 +              __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_" "$sfx"
                return
                ;;
        *.*)
                __git_compute_config_vars
 -              __gitcomp "$__git_config_vars"
 +              __gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
                ;;
        *)
                __git_compute_config_vars
 -              __gitcomp "$(echo "$__git_config_vars" | sed 's/\.[^ ]*/./g')"
 +              __gitcomp "$(echo "$__git_config_vars" |
 +                              awk -F . '{
 +                                      sections[$1] = 1
 +                              }
 +                              END {
 +                                      for (s in sections)
 +                                              print s "."
 +                              }
 +                              ')" "" "$cur_"
 +              ;;
 +      esac
 +}
 +
 +# Completes '='-separated configuration sections/variable names and values
 +# for 'git -c section.name=value'.
 +#
 +# Usage: __git_complete_config_variable_name_and_value [<option>]...
 +# --cur=<word>: The current configuration section/variable name/value to be
 +#               completed. Defaults to the current word to be completed.
 +__git_complete_config_variable_name_and_value ()
 +{
 +      local cur_="$cur"
 +
 +      while test $# != 0; do
 +              case "$1" in
 +              --cur=*)        cur_="${1##--cur=}" ;;
 +              *)              return 1 ;;
 +              esac
 +              shift
 +      done
 +
 +      case "$cur_" in
 +      *=*)
 +              __git_complete_config_variable_value \
 +                      --varname="${cur_%%=*}" --cur="${cur_#*=}"
 +              ;;
 +      *)
 +              __git_complete_config_variable_name --cur="$cur_" --sfx='='
 +              ;;
 +      esac
 +}
 +
 +_git_config ()
 +{
 +      case "$prev" in
 +      --get|--get-all|--unset|--unset-all)
 +              __gitcomp_nl "$(__git_config_get_set_variables)"
 +              return
 +              ;;
 +      *.*)
 +              __git_complete_config_variable_value
 +              return
 +              ;;
 +      esac
 +      case "$cur" in
 +      --*)
 +              __gitcomp_builtin config
 +              ;;
 +      *)
 +              __git_complete_config_variable_name
 +              ;;
        esac
  }
  
@@@ -2615,7 -2521,7 +2624,7 @@@ _git_restore (
        esac
  }
  
 -__git_revert_inprogress_options="--continue --quit --abort"
 +__git_revert_inprogress_options=$__git_sequencer_inprogress_options
  
  _git_revert ()
  {
@@@ -2683,8 -2589,9 +2692,9 @@@ _git_show (
                return
                ;;
        --*)
-               __gitcomp "--pretty= --format= --abbrev-commit --oneline
-                       --show-signature
+               __gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit
+                       --oneline --show-signature --patch
+                       --expand-tabs --expand-tabs= --no-expand-tabs
                        $__git_diff_common_options
                        "
                return
@@@ -3059,11 -2966,7 +3069,11 @@@ __git_main (
                        # Bash filename completion
                        return
                        ;;
 -              -c|--namespace)
 +              -c)
 +                      __git_complete_config_variable_name_and_value
 +                      return
 +                      ;;
 +              --namespace)
                        # we don't support completing these options' arguments
                        return
                        ;;