On Fri, Feb 08, 2019 at 04:04:00PM +0700, Nguyễn Thái Ngọc Duy wrote:
> Completion support for --guess could be made better. If no --detach is
> given, we should only provide a list of refs/heads/* and dwim ones,
> not the entire ref space. But I still can't penetrate that
> __git_refs() function yet.
> 
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
> ---
>  contrib/completion/git-completion.bash | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/contrib/completion/git-completion.bash 
> b/contrib/completion/git-completion.bash
> index 499e56f83d..891abb72d7 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2126,6 +2126,32 @@ _git_status ()
>       __git_complete_index_file "$complete_opt"
>  }
>  
> +_git_switch ()
> +{
> +     case "$cur" in
> +     --conflict=*)
> +             __gitcomp "diff3 merge" "" "${cur##--conflict=}"
> +             ;;
> +     --*)
> +             __gitcomp_builtin switch
> +             ;;
> +     *)
> +             # check if ---guess was specified to enable DWIM mode

Nit: s/---/--/

> +             local track_opt= only_local_ref=n
> +             if [ -n "$(__git_find_on_cmdline "-g --guess")" ]; then
> +                     track_opt='--track'
> +             elif [ -z "$(__git_find_on_cmdline "-d --detach")" ]; then
> +                     only_local_ref=y
> +             fi

Could these two options be used together?  I think they could.  If
that's the case, then the two conditions shouldn't be chained with
elif, but should be two separate if statements (even eliminating
$only_local_ref, while at it?).  If that's not the case, then the two
__git_find_on_cmdline() calls could be combined into one, and a case
statement could act according the option found, sparing one of the
subshells from the two.

> +             if [ $only_local_ref = y ]; then
> +                     __gitcomp_direct "$(__git_heads "" "$cur" " ")"
> +             else
> +                     __git_complete_refs $track_opt
> +             fi
> +             ;;
> +     esac
> +}
> +
>  __git_config_get_set_variables ()
>  {
>       local prevword word config_file= c=$cword
> -- 
> 2.20.1.682.gd5861c6d90
> 

Reply via email to