From: Felipe Contreras <felipe.contreras@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"SZEDER Gábor" <szeder@ira.uka.de>,
"Felipe Contreras" <felipe.contreras@gmail.com>,
"Björn Gustavsson" <bgustavsson@gmail.com>,
"Shawn O. Pearce" <spearce@spearce.org>,
"Robert Zeh" <robert.a.zeh@gmail.com>,
"Peter van der Does" <peter@avirtualhome.com>,
"Jonathan Nieder" <jrnieder@gmail.com>,
"Jeff King" <peff@peff.net>
Subject: [RFC/PATCH v2 5/8] completion: get rid of compgen
Date: Sun, 18 Nov 2012 11:56:50 +0100 [thread overview]
Message-ID: <1353236213-13471-6-git-send-email-felipe.contreras@gmail.com> (raw)
In-Reply-To: <1353236213-13471-1-git-send-email-felipe.contreras@gmail.com>
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 rods.
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.
Other solutions with awk and sed are possible and more efficient when
dealing with tens of thousands of words. But is rarely the case. For the
common cases, this solution is faster.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
contrib/completion/git-completion.bash | 15 ++++++++++-----
t/t9902-completion.sh | 2 +-
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 19e18a8..0b72f24 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -227,11 +227,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).
@@ -251,8 +256,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 35fc31b..7fb5b50 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -340,7 +340,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.0
next prev parent reply other threads:[~2012-11-18 10:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 1/8] completion: trivial test improvement Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 2/8] completion: get rid of empty COMPREPLY assignments Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 3/8] completion: add new __gitcompadd helper Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 4/8] tmp: completion: add SZEDER's tests Felipe Contreras
2012-11-18 10:56 ` Felipe Contreras [this message]
2012-11-18 10:56 ` [RFC/PATCH v2 6/8] tmp: completion: mark SZEDER's tests as fixed Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 7/8] completion: get rid of __gitcomp_1 Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 8/8] completion: small optimization Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1353236213-13471-6-git-send-email-felipe.contreras@gmail.com \
--to=felipe.contreras@gmail.com \
--cc=bgustavsson@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=peter@avirtualhome.com \
--cc=robert.a.zeh@gmail.com \
--cc=spearce@spearce.org \
--cc=szeder@ira.uka.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox