completion: no-op refactoring of checkout completion
The 'git checkout' completion function punts very early when it sees '--' on the command line, as it indicates that options or revisions can no longer appear. By returning early, it allows the default Bash action (which completes files in '$PWD') to kick in. In preparation for changing what happens in the next step when option or revision completion yields no matching candidates, or when '--' is present, reorganize the control flow to avoid this early return, and add explicit returns to the option completion branches. Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
32f1896f7f
commit
735514635b
|
|
@ -1735,49 +1735,51 @@ __git_checkout_default_dwim_mode ()
|
|||
|
||||
_git_checkout ()
|
||||
{
|
||||
__git_has_doubledash && return
|
||||
if ! __git_has_doubledash; then
|
||||
local dwim_opt="$(__git_checkout_default_dwim_mode)"
|
||||
|
||||
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 "$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 zdiff3" "" "${cur##--conflict=}"
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp_builtin checkout
|
||||
return
|
||||
;;
|
||||
*)
|
||||
# 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:
|
||||
# 1) a start-point for -b/-B, -d/--detach, or --orphan
|
||||
# 2) a remote head, for --track
|
||||
# 3) an arbitrary reference, possibly including DWIM names
|
||||
#
|
||||
|
||||
case "$cur" in
|
||||
--conflict=*)
|
||||
__gitcomp "diff3 merge zdiff3" "" "${cur##--conflict=}"
|
||||
;;
|
||||
--*)
|
||||
__gitcomp_builtin checkout
|
||||
;;
|
||||
*)
|
||||
# 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:
|
||||
# 1) a start-point for -b/-B, -d/--detach, or --orphan
|
||||
# 2) a remote head, for --track
|
||||
# 3) an arbitrary reference, possibly including DWIM names
|
||||
#
|
||||
|
||||
if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then
|
||||
__git_complete_refs --mode="refs"
|
||||
elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then
|
||||
__git_complete_refs --mode="remote-heads"
|
||||
else
|
||||
__git_complete_refs $dwim_opt --mode="refs"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then
|
||||
__git_complete_refs --mode="refs"
|
||||
elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then
|
||||
__git_complete_refs --mode="remote-heads"
|
||||
else
|
||||
__git_complete_refs $dwim_opt --mode="refs"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
__git_sequencer_inprogress_options="--continue --quit --abort --skip"
|
||||
|
|
|
|||
Loading…
Reference in New Issue