Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] _rsync - better rsync:// URL support and other fixes
- X-seq: zsh-workers 21066
- From: Andrey Borzenkov <arvidjaar@xxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: [PATCH] _rsync - better rsync:// URL support and other fixes
- Date: Sun, 27 Mar 2005 00:36:52 +0300
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
- - add rsync:// support
- - strip server banner from output (let's hope it is consistent across servers)
- - fix modules completion (it interpreted whole line as description)
it still does not grok rsync://user@server:port/ nor does it support RSYNC_RSH
or -e (-rsh) options. Probably it should, at least the latter means rsync is
using rsh not rsync server irrespectively of URL form.
Absolutely ugly "compadd -S/ rsync:/" is the only way I know to add word with
two slashes without adding blank. Oliver, do you have any idea (the same
problem I had in _urpmi too).
Oh, and I noticed that I never actually get `Host for "$user"' prompt.
- -andrey
Index: Completion/Unix/Command/_rsync
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_rsync,v
retrieving revision 1.19
diff -u -p -r1.19 _rsync
- --- Completion/Unix/Command/_rsync 11 Mar 2005 19:24:35 -0000 1.19
+++ Completion/Unix/Command/_rsync 26 Mar 2005 21:33:34 -0000
@@ -1,11 +1,32 @@
#compdef rsync
+_rsync_user_or_host() {
+ local suf=$1 rsync
+ shift
+
+ if compset -P 1 '*@'; then
+ local user=${PREFIX%%@*}
+
+ _wanted -C user-at hosts expl "host for $user" \
+ _combination -s '[:@]' "${tag}" users-hosts users="$user" hosts -S
"$suf" "$@" -
+ elif compset -S '@*'; then
+ _wanted users expl "user" \
+ _combination -s '[:@]' "${tag}" users-hosts users -q "$@" -
+ else
+ [[ $words[CURRENT] = rsync://* ]] || rsync='rsync:rsync: compadd -S/
rsync:/'
+ _alternative \
+ 'users:user:_users -S @' \
+ "hosts:host:_hosts -S '$suf'" \
+ $rsync
+ fi
+}
+
_rsync_remote_files() {
local expl remfiles remdispf remdispd remmodules suf ret=1 tag=accounts
- -if compset -P '*::*/'; then
+if compset -P '*::*/' || compset -P 'rsync://*/*/'; then
- - remfiles=(${(f)"$(_call_program files rsync ${words[CURRENT]%/*}/)"})
+ remfiles=(${${(f)"$(_call_program files rsync
${words[CURRENT]%/*}/)"}:#[ ]*})
remdispf=(${remfiles:#d*})
remdispd=(${(M)remfiles:#d*})
@@ -16,14 +37,22 @@ if compset -P '*::*/'; then
_wanted files expl 'remote file or directory' \
compadd -S/ -d remdispd ${remdispd##* }
- -elif compset -P 1 '*::'; then
+elif compset -P 1 '*::' || compset -P 1 'rsync://*/'; then
+
+ local pat=${words[CURRENT]}
- - remfiles=(${(f)"$(_call_program files rsync ${words[CURRENT]%::*}::)"})
+ if [[ $pat = *:: ]]; then
+ pat=${pat%::*}::
+ fi
- - remmodules=(${remfiles/[ ]#/:})
+ remfiles=(${${(f)"$(_call_program files rsync $pat)"}:#[ ]*})
+
+ remmodules=(${remfiles/[ ]##/:})
_describe "remote modules" remmodules -S/
+elif compset -P 'rsync://'; then
+ _rsync_user_or_host / "$@"
elif compset -P 1 '*:'; then
if zstyle -T ":completion:${curcontext}:files" remote-access; then
@@ -48,20 +77,8 @@ elif compset -P 1 '*:'; then
_message -e remote-files 'remote file'
fi
- -elif compset -P 1 '*@'; then
- - local user=${PREFIX%%@*}
- -
- - compset -S ':*' || suf=":"
- -
- - _wanted -C user-at hosts expl "host for $user" \
- - _combination -s '[:@]' "${tag}" users-hosts users="$user" hosts -S
"$suf" "$@" -
else
- - if compset -S '@*'; then
- - _wanted users expl "user" \
- - _combination -s '[:@]' "${tag}" users-hosts users -q "$@" -
- - else
- - _alternative 'users:user:_users -S @' 'hosts:host:_hosts -S:'
- - fi
+ _rsync_user_or_host : "$@"
fi
}
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCRdX9R6LMutpd94wRAhQuAKCWIjvT5S3FojItMvZux6X+MV+gUwCfUyGQ
+myYKLE5+EysA3rbNgjousA=
=clim
-----END PGP SIGNATURE-----
Messages sorted by:
Reverse Date,
Date,
Thread,
Author