diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-04-10 01:57:55 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-14 23:18:58 -0700 |
commit | 7d13e0a3afbc9d2f58a32ec27391a947e58e382c (patch) | |
tree | 72a7a3fa96251b2e704ccc31982169e8bc4e9f00 /t/t9902-completion.sh | |
parent | 43369a22588373b987d427a937b761bb04817e4d (diff) | |
download | git-7d13e0a3afbc9d2f58a32ec27391a947e58e382c.tar.gz |
completion: get rid of compgen
The functionality we use from compgen is not much, we can do the same
manually, with drastic improvements in speed, especially 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
== 10000 ==
original: 0.056s
new: 0.066s
== 100000 ==
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
== 10000 ==
original: 0.101s
new: 0.355s
== 100000 ==
original: 2.850s
new: 31.941s
So, unless 'git checkout <tab>' usually gives you more than 10000
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.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t9902-completion.sh')
-rwxr-xr-x | t/t9902-completion.sh | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index b752f4d33c..6d9d1418a0 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 && |