Re: [PATCH] completion: Handle '!f() { ... }; f' aliases
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Jun 8, 2014, 09:02 UTC
- Message-ID
- <CAPig+cQKtVoc7X2SBE8L1pSpnwQxkmFF6pL2PL-7RUoFq5h8gw@mail.gmail.com>
- In-Reply-To
- <1402150221-25548-1-git-send-email-prohaska@zib.de>
On Sat, Jun 7, 2014 at 10:10 AM, Steffen Prohaska <prohaska@zib.de> wrote:
Show 30 quoted lines
> '!f() { ... }; f' is a recommended pattern to declare more complex
> aliases (see git wiki [1]). This commit teaches the completion to
> handle them.
>
> When determining which completion to use for an alias, the opening brace
> is now ignored in order to continue the search for a git command inside
> the function body. For example, the alias '!f() { git commit ... }' now
> triggers commit completion. Previously, the search stopped on '{', and
> the completion tried it to determine how to complete, which obviously
> was useless.
>
> Furthermore, the null command ':' is now skipped, so that it can be used
> as a workaround to declare the desired completion style. For example,
> the alias '!f() { : git commit ; if ... ' now triggers commit
> completion.
>
> [1] https://git.wiki.kernel.org/index.php/Aliases
>
> Signed-off-by: Steffen Prohaska <prohaska@zib.de>
> ---
> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> index 2d4beb5..ea48681 100755
> --- a/t/t9902-completion.sh
> +++ b/t/t9902-completion.sh
> @@ -550,6 +550,26 @@ test_expect_success 'complete files' '
> test_completion "git add mom" "momified"
> '
>
> +test_expect_success 'completion uses <cmd> completion for alias !f() { VAR=val git <cmd> ... }' '
> + git config alias.co "!f() { VAR=val git checkout ... ; } f" &&test_config would be an appropriate replacement for "git config" + "git config --unset".
Show 10 quoted lines
> + test_completion "git co m" <<-\EOF &&
> + master Z
> + mybranch Z
> + mytag Z
> + EOF
> + git config --unset alias.co
> +'
> +
> +test_expect_success 'completion used <cmd> completion for alias !f() { : git <cmd> ; ... }' '
> + git config alias.co "!f() { : git checkout ; if ... } f" &&Ditto.
Show 13 quoted lines
> + test_completion "git co m" <<-\EOF && > + master Z > + mybranch Z > + mytag Z > + EOF > + git config --unset alias.co > +' > + > test_expect_failure 'complete with tilde expansion' ' > git init tmp && cd tmp && > test_when_finished "cd .. && rm -rf tmp" && > -- > 2.0.0.244.g4e8e734