Re: [PATCH] completion: Handle '!f() { ... }; f' aliases
From: Eric Sunshine <hidden>
Date: 2016-06-15 23:01:32
On Sat, Jun 7, 2014 at 10:10 AM, Steffen Prohaska [off-list ref] wrote:
quoted hunk ↗ jump to hunk
'!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 <redacted> ---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".
quoted hunk ↗ jump to hunk
+ 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.
+ 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