[POC PATCH 5/5] completion: avoid compgen to fix expansion issues in __gitcomp_nl()

2012-09-28 Thread SZEDER Gábor
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, as demonstrated by failing tests added in a previous
commit.

In __gitcomp_nl() we use only a small subset of compgen's
functionality: to filter matching possible completion words, and to
add a prefix and/or suffix to each of them.  Since the list of words
is newline-separated, we can do all these just as well with a little
sed script.  This way we can get rid of compgen and its additional
expansion of all words and don't need to perform excessive quoting to
circumvent it.

Signed-off-by: SZEDER Gábor sze...@ira.uka.de
---

We can also get rid of compgen in __gitcomp(); I already have working code
for that, but it still needs a bit of cleanup and commit messages.

 contrib/completion/git-completion.bash | 6 +-
 t/t9902-completion.sh  | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index be800e09..2df865fd 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -261,7 +261,11 @@ __gitcomp ()
 __gitcomp_nl ()
 {
local IFS=$'\n'
-   COMPREPLY=($(compgen -P ${2-} -S ${4- } -W $1 -- ${3-$cur}))
+   COMPREPLY=($(echo $1 |sed -n /^${3-$cur}/ {
+   s/^/${2-}/
+   s/$/${4- }/
+   p
+   }))
 }
 
 __git_heads ()
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 4af2a149..0ee91f64 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -209,7 +209,7 @@ test_expect_success '__gitcomp_nl - suffix' '
test_cmp expected out
 '
 
-test_expect_failure '__gitcomp_nl - expandable words' '
+test_expect_success '__gitcomp_nl - expandable words' '
sed -e s/Z$// expected -\EOF 
$foo Z
$(bar) Z
-- 
1.7.12.1.438.g7dfa67b

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [POC PATCH 5/5] completion: avoid compgen to fix expansion issues in __gitcomp_nl()

2012-09-28 Thread SZEDER Gábor
On Fri, Sep 28, 2012 at 12:09:35PM +0200, SZEDER Gábor wrote:
  __gitcomp_nl ()
  {
   local IFS=$'\n'
 - COMPREPLY=($(compgen -P ${2-} -S ${4- } -W $1 -- ${3-$cur}))
 + COMPREPLY=($(echo $1 |sed -n /^${3-$cur}/ {

$cur can be a path, so it can contain /, which then breaks this sed
expression.  Here's a fixup:


diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 2df865fd..d30f376f 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -260,8 +260,8 @@ __gitcomp ()
 #appended.
 __gitcomp_nl ()
 {
-   local IFS=$'\n'
-   COMPREPLY=($(echo $1 |sed -n /^${3-$cur}/ {
+   local IFS=$'\n' cur_=${3-$cur}
+   COMPREPLY=($(echo $1 |sed -n /^${cur_//\//\\/}/ {
s/^/${2-}/
s/$/${4- }/
p
-- 
1.7.12.1.490.g14283db

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html