summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2021-09-22 10:25:08 +0200
committerOliver Kiddle <opk@zsh.org>2021-10-26 21:56:23 +0200
commitc4b19f7fc4707321801973b259387c4e59de90cd (patch)
tree8155f9cc8034e6bb1c0154e086ce3942cbcaa495
parentf2b6650b43688eb38ffe88b3ed3c819b48fa141c (diff)
downloadzsh-c4b19f7fc4707321801973b259387c4e59de90cd.tar.gz
zsh-c4b19f7fc4707321801973b259387c4e59de90cd.zip
49431 (tweaked, c.f. Bart: 49434): Faster ~/.ssh/config processing
When iterating over the ssh config file, iterate over the array linearly instead of always processing the first and then removing it from the list. This speeds up processing significantly.
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Type/_ssh_hosts9
2 files changed, 8 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 39efef8eb..fcebf9b4a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2021-10-26 Oliver Kiddle <opk@zsh.org>
+ * Peter Palfrader: 49431 (tweaked, c.f. Bart: 49434):
+ Completion/Unix/Type/_ssh_hosts: Faster ~/.ssh/config processing
+
* Marlon: 49521: Doc/Zsh/compwid.yo, Test/Y02compmatch.ztst:
Define correct behavior of || completion matchers
diff --git a/Completion/Unix/Type/_ssh_hosts b/Completion/Unix/Type/_ssh_hosts
index bd5366425..a4a08ad91 100644
--- a/Completion/Unix/Type/_ssh_hosts
+++ b/Completion/Unix/Type/_ssh_hosts
@@ -20,8 +20,9 @@ if [[ -r $config ]]; then
local key line host
local -a lines=("${(@f)$(<"$config")}") 2>/dev/null
local -a match_args
- while (($#lines)); do
- IFS=$'=\t ' read -r key line <<<"${lines[1]}"
+ local idx=1
+ while (( idx <= $#lines )); do
+ IFS=$'=\t ' read -r key line <<<"${lines[idx]}"
if [[ "$key" == ((#i)match) ]]; then
match_args=(${(z)line})
while [[ $#match_args -ge 2 ]]; do
@@ -35,7 +36,7 @@ if [[ -r $config ]]; then
fi
case "$key" in
((#i)include)
- lines[1]=("${(@f)$(cd $HOME/.ssh; cat ${(z)~line})}") 2>/dev/null;;
+ lines[idx]=("${(@f)$(cd $HOME/.ssh; cat ${(z)~line})}") 2>/dev/null;;
((#i)host(|name))
for host in ${(z)line}; do
case $host in
@@ -43,7 +44,7 @@ if [[ -r $config ]]; then
(*) config_hosts+=("$host") ;;
esac
done ;&
- (*) shift lines;;
+ (*) (( ++idx ));;
esac
done
if (( ${#config_hosts} )); then