On Fri, Feb 8, 2019 at 9:19 PM SZEDER Gábor <[email protected]> wrote:
>
> 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 <[email protected]>
> > ---
> > 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.
It does not make much sense when dwim is active since you'll be
creating a new branch then detach from it. But yeah when you give a
real branch, no dwim, no new branch created, then "git switch -dg"
should work. Will fix.
> 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
> >
--
Duy