Re: [PATCH] completion: optionally disable checkout DWIM
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 21, 2017, 05:01 UTC
- Message-ID
- <xmqqzifa4amr.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20170420201229.fxiylgp2v2v4sz3w@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 10 quoted lines
> When we complete branch names for "git checkout", we also > complete remote branch names that could trigger the DWIM > behavior. Depending on your workflow and project, this can > be either convenient or annoying. > ... > This is flexible enough for me, but it's possible somebody would want > this on a per-repo basis. I don't know that we want to read from `git > config`, though, because it's relatively expensive to do so. People who > want per-repo settings are probably better off with a hook that triggers > when they "cd" around, and sets up their preferences.
Sounds OK. I am kind of surprised that --no-guess is the only way to turn off this dwimming (not in the completion side, but there does not seem to be a way to tell "git checkout" that you do not need that create-missing-branch-out-of-remote-tracking).
Show 32 quoted lines
> contrib/completion/git-completion.bash | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 1150164d5..f53b18fae 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -28,6 +28,14 @@
> # completion style. For example '!f() { : git commit ; ... }; f' will
> # tell the completion to use commit completion. This also works with aliases
> # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
> +#
> +# You can set the following environment variables to influence the behavior of
> +# the completion routines:
> +#
> +# GIT_COMPLETION_CHECKOUT_NO_GUESS
> +#
> +# When non-empty, do not include "DWIM" suggestions in git-checkout
> +# completion (e.g., completing "foo" when "origin/foo" exists).
>
> case "$COMP_WORDBREAKS" in
> *:*) : great ;;
> @@ -1248,7 +1256,8 @@ _git_checkout ()
> # check if --track, --no-track, or --no-guess was specified
> # if so, disable DWIM mode
> local flags="--track --no-track --no-guess" track_opt="--track"
> - if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
> + if [ -n "$GIT_COMPLETION_CHECKOUT_NO_GUESS" -o \
> + -n "$(__git_find_on_cmdline "$flags")" ]; then
> track_opt=''
> fi
> __git_complete_refs $track_opt