Thread (3 messages) 3 messages, 2 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help