completion: handle '!f() { ... }; f' and "!sh -c '...' -" aliases
authorSteffen Prohaska <prohaska@zib.de>
Thu, 12 Jun 2014 18:49:29 +0000 (20:49 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Jun 2014 20:37:43 +0000 (13:37 -0700)
commit56f24e80f0af4dd3591c8f143183b59cf9a34620
tree1efa7f48052be1ba8d412d52e6dcae1198fd1a3a
parente156455ea49124c140a67623f22a393db62d5d98
completion: handle '!f() { ... }; f' and "!sh -c '...' -" aliases

'!f() { ... }; f' and "!sh -c '....' -" are recommended patterns for
declaring more complex aliases (see git wiki [1]).  This commit teaches
the completion to handle them.

When determining which completion to use for an alias, an opening brace
or single quote is now skipped, and the search for a git command is
continued.  For example, the aliases '!f() { git commit ... }' or "!sh
-c 'git commit ...'" now trigger commit completion.  Previously, the
search stopped on the opening brace or quote, and the completion tried
it to determine how to complete, which obviously was useless.

The null command ':' is now skipped, so that it can be used as
a workaround to declare the desired completion style.

For example, the aliases

    !f() { : git commit ; if ... } f
    !sh -c ': git commit; if ...' -

now trigger commit completion.

Shell function declarations now work with or without space before
the parens, i.e. '!f() ...' and '!f () ...' both work.

[1] https://git.wiki.kernel.org/index.php/Aliases

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-completion.bash
t/t9902-completion.sh