summaryrefslogtreecommitdiff
path: root/contrib/completion/git-completion.bash
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/completion/git-completion.bash')
-rw-r--r--contrib/completion/git-completion.bash112
1 files changed, 65 insertions, 47 deletions
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 679d1ec..36f5a91 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1467,14 +1467,15 @@ _git_bundle ()
# Helper function to decide whether or not we should enable DWIM logic for
# git-switch and git-checkout.
#
-# To decide between the following rules in priority order
-# 1) the last provided of "--guess" or "--no-guess" explicitly enable or
-# disable completion of DWIM logic respectively.
-# 2) If the --no-track option is provided, take this as a hint to disable the
-# DWIM completion logic
-# 3) If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion
-# logic, as requested by the user.
-# 4) Enable DWIM logic otherwise.
+# To decide between the following rules in decreasing priority order:
+# - the last provided of "--guess" or "--no-guess" explicitly enable or
+# disable completion of DWIM logic respectively.
+# - If checkout.guess is false, disable completion of DWIM logic.
+# - If the --no-track option is provided, take this as a hint to disable the
+# DWIM completion logic
+# - If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion
+# logic, as requested by the user.
+# - Enable DWIM logic otherwise.
#
__git_checkout_default_dwim_mode ()
{
@@ -1485,11 +1486,17 @@ __git_checkout_default_dwim_mode ()
fi
# --no-track disables DWIM, but with lower priority than
- # --guess/--no-guess
+ # --guess/--no-guess/checkout.guess
if [ -n "$(__git_find_on_cmdline "--no-track")" ]; then
dwim_opt=""
fi
+ # checkout.guess = false disables DWIM, but with lower priority than
+ # --guess/--no-guess
+ if [ "$(__git config --type=bool checkout.guess)" = "false" ]; then
+ dwim_opt=""
+ fi
+
# Find the last provided --guess or --no-guess
last_option="$(__git_find_last_on_cmdline "--guess --no-guess")"
case "$last_option" in
@@ -1508,6 +1515,22 @@ _git_checkout ()
{
__git_has_doubledash && return
+ local dwim_opt="$(__git_checkout_default_dwim_mode)"
+
+ case "$prev" in
+ -b|-B|--orphan)
+ # Complete local branches (and DWIM branch
+ # remote branch names) for an option argument
+ # specifying a new branch name. This is for
+ # convenience, assuming new branches are
+ # possibly based on pre-existing branch names.
+ __git_complete_refs $dwim_opt --mode="heads"
+ return
+ ;;
+ *)
+ ;;
+ esac
+
case "$cur" in
--conflict=*)
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
@@ -1516,23 +1539,6 @@ _git_checkout ()
__gitcomp_builtin checkout
;;
*)
- local dwim_opt="$(__git_checkout_default_dwim_mode)"
- local prevword prevword="${words[cword-1]}"
-
- case "$prevword" in
- -b|-B|--orphan)
- # Complete local branches (and DWIM branch
- # remote branch names) for an option argument
- # specifying a new branch name. This is for
- # convenience, assuming new branches are
- # possibly based on pre-existing branch names.
- __git_complete_refs $dwim_opt --mode="heads"
- return
- ;;
- *)
- ;;
- esac
-
# At this point, we've already handled special completion for
# the arguments to -b/-B, and --orphan. There are 3 main
# things left we can possibly complete:
@@ -1689,6 +1695,7 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--submodule --submodule= --ignore-submodules
--indent-heuristic --no-indent-heuristic
--textconv --no-textconv
+ --patch --no-patch
"
__git_diff_difftool_options="--cached --staged --pickaxe-all --pickaxe-regex
@@ -1781,6 +1788,10 @@ _git_format_patch ()
" "" "${cur##--thread=}"
return
;;
+ --base=*|--interdiff=*|--range-diff=*)
+ __git_complete_refs --cur="${cur#--*=}"
+ return
+ ;;
--*)
__gitcomp_builtin format-patch "$__git_format_patch_extra_options"
return
@@ -2025,11 +2036,9 @@ _git_log ()
--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
- --patch --no-patch
"
return
;;
@@ -2385,6 +2394,22 @@ _git_status ()
_git_switch ()
{
+ local dwim_opt="$(__git_checkout_default_dwim_mode)"
+
+ case "$prev" in
+ -c|-C|--orphan)
+ # Complete local branches (and DWIM branch
+ # remote branch names) for an option argument
+ # specifying a new branch name. This is for
+ # convenience, assuming new branches are
+ # possibly based on pre-existing branch names.
+ __git_complete_refs $dwim_opt --mode="heads"
+ return
+ ;;
+ *)
+ ;;
+ esac
+
case "$cur" in
--conflict=*)
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
@@ -2393,23 +2418,6 @@ _git_switch ()
__gitcomp_builtin switch
;;
*)
- local dwim_opt="$(__git_checkout_default_dwim_mode)"
- local prevword prevword="${words[cword-1]}"
-
- case "$prevword" in
- -c|-C|--orphan)
- # Complete local branches (and DWIM branch
- # remote branch names) for an option argument
- # specifying a new branch name. This is for
- # convenience, assuming new branches are
- # possibly based on pre-existing branch names.
- __git_complete_refs $dwim_opt --mode="heads"
- return
- ;;
- *)
- ;;
- esac
-
# Unlike in git checkout, git switch --orphan does not take
# a start point. Thus we really have nothing to complete after
# the branch name.
@@ -2836,6 +2844,13 @@ _git_reset ()
_git_restore ()
{
+ case "$prev" in
+ -s)
+ __git_complete_refs
+ return
+ ;;
+ esac
+
case "$cur" in
--conflict=*)
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
@@ -2926,7 +2941,7 @@ _git_show ()
;;
--*)
__gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit
- --oneline --show-signature --patch
+ --oneline --show-signature
--expand-tabs --expand-tabs= --no-expand-tabs
$__git_diff_common_options
"
@@ -3009,7 +3024,10 @@ _git_stash ()
list,--*)
__gitcomp "--name-status --oneline --patch-with-stat"
;;
- show,--*|branch,--*)
+ show,--*)
+ __gitcomp "$__git_diff_common_options"
+ ;;
+ branch,--*)
;;
branch,*)
if [ $cword -eq 3 ]; then