Re: [PATCH v3 5/7] completion: get rid of compgen

2013-04-12 Thread Junio C Hamano
Felipe Contreras felipe.contre...@gmail.com writes:

 Here are some numbers filtering N amount of words:

Nice table.  N amount of words sounded somewhat funny to me, but I
am not a native.

 ...
   == 1000 ==
   original: 0.012s
   new: 0.011s
   == 1 ==
   original: 0.056s
   new: 0.066s
   == 10 ==
   original: 2.669s
   new: 0.622s

 If the results are not narrowed:
 ...
   == 1000 ==
   original: 0.020s
   new: 0.015s
   == 1 ==
   original: 0.101s
   new: 0.355s
   == 10 ==
   original: 2.850s
   new: 31.941s

 So, unless 'git checkout tab' usually gives you more than 10
 results, you'll get an improvement :)

Nice numbers.  I think you meant 1 not 10 here.

 diff --git a/contrib/completion/git-completion.bash 
 b/contrib/completion/git-completion.bash
 index 90b54ab..d8009f5 100644
 --- a/contrib/completion/git-completion.bash
 +++ b/contrib/completion/git-completion.bash
 @@ -197,11 +197,16 @@ fi
  
  __gitcompadd ()
  {
 - COMPREPLY=($(compgen -W $1 -P $2 -S $4 -- $3))
 + local i=0
 + for x in $1; do
 + if [[ $x == $3* ]]; then
 + COMPREPLY[i++]=$2$x$4
 + fi
 + done
  }

Nice; can't be simpler than that ;-)
--
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


[PATCH v3 5/7] completion: get rid of compgen

2013-04-10 Thread Felipe Contreras
The functionality we use from compgen is not much, we can do the same
manually, with drastical improvements in speed, specially when dealing
with only a few words.

This patch also has the sideffect that brekage reported by Jeroen Meijer
and SZEDER Gábor gets fixed because we no longer expand the resulting
words.

Here are some numbers filtering N amount of words:

  == 1 ==
  original: 0.002s
  new: 0.000s
  == 10 ==
  original: 0.002s
  new: 0.000s
  == 100 ==
  original: 0.003s
  new: 0.002s
  == 1000 ==
  original: 0.012s
  new: 0.011s
  == 1 ==
  original: 0.056s
  new: 0.066s
  == 10 ==
  original: 2.669s
  new: 0.622s

If the results are not narrowed:

  == 1 ==
  original: 0.002s
  new: 0.000s
  == 10 ==
  original: 0.002s
  new: 0.001s
  == 100 ==
  original: 0.004s
  new: 0.004s
  == 1000 ==
  original: 0.020s
  new: 0.015s
  == 1 ==
  original: 0.101s
  new: 0.355s
  == 10 ==
  original: 2.850s
  new: 31.941s

So, unless 'git checkout tab' usually gives you more than 10
results, you'll get an improvement :)

Other possible solutions perform better after 1000 words, but worst if
less than that:

  COMPREPLY=($(awk -v cur=$3 -v pre=$2 -v suf=$4
'$0 ~ cur { print pre$0suf }'  $1 ))

  COMPREPLY=($(printf -- $2%s$4\n $1 | grep ^$2$3))

Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
---
 contrib/completion/git-completion.bash | 15 ++-
 t/t9902-completion.sh  |  6 +++---
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 90b54ab..d8009f5 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -197,11 +197,16 @@ fi
 
 __gitcompadd ()
 {
-   COMPREPLY=($(compgen -W $1 -P $2 -S $4 -- $3))
+   local i=0
+   for x in $1; do
+   if [[ $x == $3* ]]; then
+   COMPREPLY[i++]=$2$x$4
+   fi
+   done
 }
 
-# Generates completion reply with compgen, appending a space to possible
-# completion words, if necessary.
+# Generates completion reply, appending a space to possible completion words,
+# if necessary.
 # It accepts 1 to 4 arguments:
 # 1: List of possible completion words.
 # 2: A prefix to be added to each possible completion word (optional).
@@ -221,8 +226,8 @@ __gitcomp ()
esac
 }
 
-# Generates completion reply with compgen from newline-separated possible
-# completion words by appending a space to all of them.
+# Generates completion reply from newline-separated possible completion words
+# by appending a space to all of them.
 # It accepts 1 to 4 arguments:
 # 1: List of possible completion words, separated by a single newline.
 # 2: A prefix to be added to each possible completion word (optional).
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index b752f4d..6d9d141 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -165,7 +165,7 @@ test_expect_success '__gitcomp - suffix' '
EOF
 '
 
-test_expect_failure '__gitcomp - doesnt fail because of invalid variable name' 
'
+test_expect_success '__gitcomp - doesnt fail because of invalid variable name' 
'
__gitcomp $invalid_variable_name
 '
 
@@ -204,7 +204,7 @@ test_expect_success '__gitcomp_nl - no suffix' '
EOF
 '
 
-test_expect_failure '__gitcomp_nl - doesnt fail because of invalid variable 
name' '
+test_expect_success '__gitcomp_nl - doesnt fail because of invalid variable 
name' '
__gitcomp_nl $invalid_variable_name
 '
 
@@ -332,7 +332,7 @@ test_expect_success 'complete tree filename with spaces' '
EOF
 '
 
-test_expect_failure 'complete tree filename with metacharacters' '
+test_expect_success 'complete tree filename with metacharacters' '
echo content name with \${meta} 
git add . 
git commit -m meta 
-- 
1.8.2.1

--
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: [PATCH v3 5/7] completion: get rid of compgen

2013-04-10 Thread Eric Sunshine
On Wed, Apr 10, 2013 at 2:57 AM, Felipe Contreras
felipe.contre...@gmail.com wrote:
 The functionality we use from compgen is not much, we can do the same
 manually, with drastical improvements in speed, specially when dealing

s/drastical/drastic/
s/specially/especially/

 with only a few words.

 This patch also has the sideffect that brekage reported by Jeroen Meijer

s/sideffect/side effect/
s/brekage/breakage/

 and SZEDER Gábor gets fixed because we no longer expand the resulting
 words.

 So, unless 'git checkout tab' usually gives you more than 10
 results, you'll get an improvement :)

 Other possible solutions perform better after 1000 words, but worst if

s/worst/worse/

 less than that:

   COMPREPLY=($(awk -v cur=$3 -v pre=$2 -v suf=$4
 '$0 ~ cur { print pre$0suf }'  $1 ))

   COMPREPLY=($(printf -- $2%s$4\n $1 | grep ^$2$3))

 Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
--
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: [PATCH v3 5/7] completion: get rid of compgen

2013-04-10 Thread John Keeping
On Wed, Apr 10, 2013 at 06:07:33AM -0500, Felipe Contreras wrote:
 On Wed, Apr 10, 2013 at 5:10 AM, Eric Sunshine sunsh...@sunshineco.com 
 wrote:
  s/specially/especially/
 
 http://www.merriam-webster.com/dictionary/specially

But see also:

http://www.merriam-webster.com/dictionary/especially

which notes in particular as a synonym, which is what makes it more
natural in the case under discussion here.
--
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