From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3775 invoked by alias); 27 Apr 2011 12:51:25 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 29091 Received: (qmail 17638 invoked from network); 27 Apr 2011 12:51:11 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.160.43 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=zMWNatZJZbiI+50QoqISKMUF3bp5ALOE87cEPgeUGhM=; b=PKDRQAxQy5/QuzA6/WcAZ/4r8gcLXOsUtQny0b2c6pKBeSs5Y/Qfq7CXHBoedfwkLD /Jh5aB8EMZclk/JCGMNJwwAGjGFNMsXaDFHiD/bxMTdj2zYPpP2YjDpO0EjHl9g4/7Cf yWNyFKU4O2/4nAR4llscS2rWEgSUADsC+OzRY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=EfmNVwM20yRKLAD4Jk6lF+PVOvSZpyp8FBEE7rRMlCavJ/BVCGiMcYNcfNeU/6vkwm pzJdA9OCQQp5iFyBopAG/UdaTsInD4tTPqHjNnRENuwuddohBz5rf9/gQ2rjds84rZhe Kk6Vp42GBXksCvDN1O6G0/+jj/c61t60Nmpfw= MIME-Version: 1.0 Sender: nikolai.weibull@gmail.com In-Reply-To: <110426211951.ZM4200@torch.brasslantern.com> References: <87liyw7t0o.fsf@ft.bewatermyfriend.org> <110426211951.ZM4200@torch.brasslantern.com> Date: Wed, 27 Apr 2011 14:51:05 +0200 X-Google-Sender-Auth: WtF_pw2t10b51yRk1rCe1Rhh2ko Message-ID: Subject: Re: Slowness issue with git completion From: Nikolai Weibull To: Bart Schaefer Cc: zsh-workers@zsh.org Content-Type: multipart/mixed; boundary=bcaec520ee0fd713b304a1e5e413 --bcaec520ee0fd713b304a1e5e413 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Wed, Apr 27, 2011 at 06:19, Bart Schaefer wr= ote: > Also as someone noted elsewhere, zsh isn't very efficient at doing > array appends or slices. =C2=A0Both complex string manipulations and lots > of array slicing/appending are done in __git_files_relative which is > called from _git_files. =C2=A0Not only that, but it does string ops on th= e > path prefix on every pass around the "for file in $rawfiles" loop; > that at least could be abstracted. > > I suspect that if someone undertook to rewrite __git_files_relative > wholly or partly in something like sed or awk, the whole thing would > be down to ~2 seconds even for a large number of files. =C2=A0Heck, even > redoing the nested loops to do one multi-element array slice each > instead of many single-element splices might make a huge difference. Let=E2=80=99s instead remove it. The attached patch seems to speed up matching a lot, while maintaining all functionality. There might be cases that I haven=E2=80=99t considered. Please review. Another adjustment is that we could join the calls to git rev-parse into one call: gitcdupandprefix=3D${$(_call_program git-cdup-and-prefix git rev-parse --show-cdup --show-prefix 2>/dev/null)/$'\n'} to decrease the fork count as well, which makes a difference on Cygwin. This won=E2=80=99t be quite correct, however, as it won=E2=80=99t = work for prefixes with newlines in them. Git-rev-parse sadly doesn=E2=80=99t take t= he -z option. Also, Bart, supplying -f to _multi_parts here doesn=E2=80=99t seem to have = any effect on match highlighting. Directories are shown the same as files. This was something I asked about a long time ago that we were going to look at at a later date. Perhaps that date has come? --bcaec520ee0fd713b304a1e5e413 Content-Type: application/octet-stream; name="git.patch" Content-Disposition: attachment; filename="git.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gn09d4lk0 ZGlmZiAtLWdpdCBhL0NvbXBsZXRpb24vVW5peC9Db21tYW5kL19naXQgYi9Db21wbGV0aW9uL1Vu aXgvQ29tbWFuZC9fZ2l0CmluZGV4IDQ2NjRjZmEuLjZmNzFkYjMgMTAwNjQ0Ci0tLSBhL0NvbXBs ZXRpb24vVW5peC9Db21tYW5kL19naXQKKysrIGIvQ29tcGxldGlvbi9Vbml4L0NvbW1hbmQvX2dp dApAQCAtNTE0NCw3NSArNTE0NCwyNyBAQCBfX2dpdF9ub3Rlc19yZWZzICgpIHsKIAogIyBGaWxl IEFyZ3VtZW50IFR5cGVzCiAKLSgoICQrZnVuY3Rpb25zW19fZ2l0X2ZpbGVzX3JlbGF0aXZlXSAp KSB8fAotX19naXRfZmlsZXNfcmVsYXRpdmUgKCkgewotICBsb2NhbCByYXdmaWxlcyBmaWxlcyBm aWxlIGZfcGFydHMgcHJlZml4IHBfcGFydHMgdG1wCi0KLSAgcHJlZml4PSQoX2NhbGxfcHJvZ3Jh bSBnaXRwcmVmaXggZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IDI+L2Rldi9udWxsKQotICBf X2dpdF9jb21tYW5kX3N1Y2Nlc3NmdWwgJHBpcGVzdGF0dXMgfHwgcmV0dXJuCi0KLSAgIyBFbXB0 eSBwcmVmaXgsIG5vIG1vZGlmaWNhdGlvbnMKLSAgaWYgKCggJCNwcmVmaXggPT0gMCApKTsgdGhl bgotICAgIHByaW50ICQxCi0gICAgcmV0dXJuCi0gIGZpCi0KLSAgcmF3ZmlsZXM9KCR7KDApMX0p Ci0gIGZpbGVzPSgpCi0KLSAgIyBOb3cgd2UgYXNzdW1lIHRoYXQgd2UndmUgZ2l2ZW4gImFic29s dXRlIiBwYXRocyBsaXN0IHdpdGggInJvb3QiCi0gICMgYmVpbmcgcmVwb3NpdG9yeSB0b3AgZGly ZWN0b3J5LiAgJHByZWZpeCBpcyBhbHNvICJhYnNvbHV0ZSIgcGF0aC4KLSAgZm9yIGZpbGUgaW4g JHJhd2ZpbGVzOyBkbwotICAgICMgQ29sbGFwc2UgIi8uLyIgYW5kICIvLyIsIHN0cmlwICIvLiIg YW5kICIvIiBmcm9tIHRhaWwgKEkga25vdywKLSAgICAjIHRoaXMgaXMgYSBiaXQgcGFyYW5vaWQp LgotICAgIGZfcGFydHM9KCR7KHM6LzopIiR7JHskeyR7ZmlsZS8vXC9cLy8vfS8vXC8uXC8vL30l JS8ufSUlL30ifSkKLSAgICBwX3BhcnRzPSgkeyhzOi86KSIkeyR7JHske3ByZWZpeC8vXC9cLy8v fS8vXC8uXC8vL30lJS8ufSUlL30ifSkKLSAgICB0bXA9KCkKLQotICAgICMgU3RyaXAgY29tbW9u IHBhdGggcHJlZml4LgotICAgIHdoaWxlICgoICQjZl9wYXJ0cyA+IDAgKSkgJiYgKCggJCNwX3Bh cnRzID4gMCApKSAmJiBbWyAkZl9wYXJ0c1sxXSA9PSAkcF9wYXJ0c1sxXSBdXTsgZG8KLSAgICAg IGZfcGFydHNbMV09KCkKLSAgICAgIHBfcGFydHNbMV09KCkKLSAgICBkb25lCi0KLSAgICAjIElm IHByZWZpeCBzdGlsbCBub3QgZW1wdHksIGFzY2VuZCB1cC4KLSAgICB3aGlsZSAoKCAkI3BfcGFy dHMgPiAwICkpOyBkbwotICAgICAgdG1wKz0uLgotICAgICAgcF9wYXJ0c1sxXT0oKQotICAgIGRv bmUKLQotICAgICMgQWRkIHJlbWFpbmluZyBwYXRoLgotICAgIHRtcCs9KCRmX3BhcnRzKQotCi0g ICAgZmlsZXMrPSR7KGo6LzopdG1wfQotICBkb25lCi0KLSAgcHJpbnQgJHsocGo6XDA6KWZpbGVz fQotfQotCiAoKCAkK2Z1bmN0aW9uc1tfX2dpdF9maWxlc10gKSkgfHwKIF9fZ2l0X2ZpbGVzICgp IHsKLSAgbG9jYWwgY29tcGFkZF9vcHRzIG9wdHMgdGFnIGRlc2NyaXB0aW9uIGdpdGRpciBnaXRj ZHVwIGZpbGVzIGV4cGwKKyAgbG9jYWwgY29tcGFkZF9vcHRzIG9wdHMgdGFnIGRlc2NyaXB0aW9u IGdpdGNkdXAgZ2l0cHJlZml4IGZpbGVzIGV4cGwKIAogICB6cGFyc2VvcHRzIC1EIC1FIC1hIGNv bXBhZGRfb3B0cyBWOiBKOiAxIDIgbiBmIFg6IE06IFA6IFM6IHI6IFI6IHEgRjoKICAgenBhcnNl b3B0cyAtRCAtRSAtYSBvcHRzIC0tIC1jYWNoZWQgLWRlbGV0ZWQgLW1vZGlmaWVkIC1vdGhlcnMg LWlnbm9yZWQgLXVubWVyZ2VkIC1raWxsZWQgeCs6IC0tZXhjbHVkZSs6CiAgIHRhZz0kMSBkZXNj cmlwdGlvbj0kMjsgc2hpZnQgMgogCi0gIGdpdGRpcj0kKF9jYWxsX3Byb2dyYW0gZ2l0ZGlyIGdp dCByZXYtcGFyc2UgLS1naXQtZGlyIDI+L2Rldi9udWxsKQorICBnaXRjZHVwPSQoX2NhbGxfcHJv Z3JhbSBnaXRjZHVwIGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAgMj4vZGV2L251bGwpCiAgIF9f Z2l0X2NvbW1hbmRfc3VjY2Vzc2Z1bCAkcGlwZXN0YXR1cyB8fCByZXR1cm4KIAotICBnaXRjZHVw PSQoX2NhbGxfcHJvZ3JhbSBnaXRjZHVwIGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAgMj4vZGV2 L251bGwpCisgIGdpdHByZWZpeD0kKF9jYWxsX3Byb2dyYW0gZ2l0cHJlZml4IGdpdCByZXYtcGFy c2UgLS1zaG93LXByZWZpeCAyPi9kZXYvbnVsbCkKICAgX19naXRfY29tbWFuZF9zdWNjZXNzZnVs ICRwaXBlc3RhdHVzIHx8IHJldHVybgogCi0gIG9wdHMrPSctLWV4Y2x1ZGUtcGVyLWRpcmVjdG9y eT0uZ2l0aWdub3JlJwotICBbWyAtZiAiJGdpdGRpci9pbmZvL2V4Y2x1ZGUiIF1dICYmIG9wdHMr PSItLWV4Y2x1ZGUtZnJvbT0kZ2l0ZGlyL2luZm8vZXhjbHVkZSIKKyAgIyBUT0RPOiAtLWRpcmVj dG9yeSBzaG91bGQgcHJvYmFibHkgYmUgYWRkZWQgdG8gJG9wdHMgd2hlbiAtLW90aGVycyBpcyBn aXZlbi4KIAotICBmaWxlcz0kKF9jYWxsX3Byb2dyYW0gZmlsZXMgZ2l0IGxzLWZpbGVzIC16IC0t ZnVsbC1uYW1lICRvcHRzIC0tICRnaXRjZHVwIDI+L2Rldi9udWxsKQotICBfX2dpdF9jb21tYW5k X3N1Y2Nlc3NmdWwgJHBpcGVzdGF0dXMgfHwgcmV0dXJuCi0gIGZpbGVzPSgkeygwKSIkKF9fZ2l0 X2ZpbGVzX3JlbGF0aXZlICRmaWxlcykifSkKKyAgbG9jYWwgcHJlZj0kZ2l0Y2R1cCRnaXRwcmVm aXgkUFJFRklYCisgIGZpbGVzPSgkeygwKSIkKF9jYWxsX3Byb2dyYW0gZmlsZXMgZ2l0IGxzLWZp bGVzIC16IC0tZXhjbHVkZS1zdGFuZGFyZCAkb3B0cyAtLSAke3ByZWY6KyRwcmVmL1wqfSAyPi9k ZXYvbnVsbCkifSkKICAgX19naXRfY29tbWFuZF9zdWNjZXNzZnVsICRwaXBlc3RhdHVzIHx8IHJl dHVybgogCi0gIF93YW50ZWQgJHRhZyBleHBsICRkZXNjcmlwdGlvbiBfbXVsdGlfcGFydHMgJGNv bXBhZGRfb3B0cyAtIC8gZmlsZXMKKyAgX3dhbnRlZCAkdGFnIGV4cGwgJGRlc2NyaXB0aW9uIF9t dWx0aV9wYXJ0cyAtZiAkY29tcGFkZF9vcHRzIC0gLyBmaWxlcwogfQogCiAoKCAkK2Z1bmN0aW9u c1tfX2dpdF9jYWNoZWRfZmlsZXNdICkpIHx8Cg== --bcaec520ee0fd713b304a1e5e413--