compgen performs expansion on all words in the list given to its -W option. This breaks completion in various ways if one of those words can be expanded. The funniest breakage is probably this, as the command_not_found_handle kicks in: $ git branch '$(foo)' $ git branch <TAB>No command 'foo' found, did you mean: Command 'fio' from package 'fio' (universe) Command 'goo' from package 'goo' (universe) Command 'fop' from package 'fop' (main) Command 'fox' from package 'objcryst-fox' (universe) Command 'xoo' from package 'xoo' (universe) Command 'zoo' from package 'zoo' (universe) foo: command not found Document this breakage with tests. Signed-off-by: SZEDER Gábor <szeder@xxxxxxxxxx> --- t/t9902-completion.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 01f33220..4af2a149 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -146,6 +146,22 @@ test_expect_success '__gitcomp - suffix' ' test_cmp expected out ' +test_expect_failure '__gitcomp - expandable words' ' + sed -e "s/Z$//" >expected <<-\EOF && + $foo Z + $(bar) Z + ${baz} Z + EOF + ( + local -a COMPREPLY && + cur="" && + __gitcomp "\$foo \$(bar) \${baz}" && + IFS="$newline" && + echo "${COMPREPLY[*]}" > out + ) && + test_cmp expected out +' + test_expect_success '__gitcomp_nl - trailing space' ' sed -e "s/Z$//" >expected <<-\EOF && maint Z @@ -193,6 +209,22 @@ test_expect_success '__gitcomp_nl - suffix' ' test_cmp expected out ' +test_expect_failure '__gitcomp_nl - expandable words' ' + sed -e "s/Z$//" >expected <<-\EOF && + $foo Z + $(bar) Z + ${baz} Z + EOF + ( + local -a COMPREPLY && + cur="" && + __gitcomp_nl "\$foo$newline\$(bar)$newline\${baz}" && + IFS="$newline" && + echo "${COMPREPLY[*]}" > out + ) && + test_cmp expected out +' + test_expect_success 'basic' ' run_completion git "" && # built-in -- 1.7.12.1.438.g7dfa67b -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html