summaryrefslogtreecommitdiff
path: root/Functions/Zftp/zfput
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2000-05-08 10:45:02 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2000-05-08 10:45:02 +0000
commit17d342160ae1c59687b61332bd4dee5e62bd509a (patch)
tree7ca5430438165cd96abb44d1d201819438625f11 /Functions/Zftp/zfput
parentcfcb3202ef71040a7019609da6cb21de57f16ad6 (diff)
downloadzsh-17d342160ae1c59687b61332bd4dee5e62bd509a.tar.gz
zsh-17d342160ae1c59687b61332bd4dee5e62bd509a.zip
11252: no colon at the end of zftp function contexts
Diffstat (limited to 'Functions/Zftp/zfput')
-rw-r--r--Functions/Zftp/zfput59
1 files changed, 52 insertions, 7 deletions
diff --git a/Functions/Zftp/zfput b/Functions/Zftp/zfput
index 0687163f0..68ef5be5c 100644
--- a/Functions/Zftp/zfput
+++ b/Functions/Zftp/zfput
@@ -3,19 +3,64 @@
# off any directory parts to get the remote filename (i.e. always
# goes into current remote directory). Use zfpcp to specify new
# file name or new directory at remote end.
+#
+# -r means put recursively: any directories encountered will have
+# all their contents to arbitrary depth transferred. Note that
+# this creates the required directories. Any files in subdirectories
+# whose names begin with a `.' will also be included.
emulate -L zsh
-local loc rem
-integer stat do_close
+[[ $curcontext = :zf* ]] || local curcontext=:zfput
+local opt opt_r
+integer stat do_close abort
+
+while getopts :r opt; do
+ [[ $opt = '?' ]] && print "zfget: bad option: -$OPTARG" && return 1
+ eval "opt_$opt=1"
+done
+(( OPTIND > 1 )) && shift $(( OPTIND - 1 ))
zfautocheck
-for loc in $*; do
- rem=${loc:t}
- zftp put $rem <$loc
- [[ $? == 0 ]] || stat=$?
-done
+zfput_sub() {
+ local subdirs loc rem
+ integer stat
+ subdirs=()
+
+ for loc in $*; do
+ if [[ -n $opt_r ]]; then
+ if [[ -d $loc ]]; then
+ subdirs=($subdirs $loc)
+ continue
+ else
+ rem=$loc
+ fi
+ else
+ rem=${loc:t}
+ fi
+
+ zftp put $rem <$loc
+ (( $? )) && stat=$?
+ if ! zftp test; then
+ abort=1
+ (( stat )) || stat=1
+ break;
+ fi
+ done
+
+ while (( $#subdirs && ! abort )); do
+ zftp mkdir ${subdirs[1]}
+ zfput_sub ${subdirs[1]}/*(ND)
+ (( $? )) && stat=$?
+ shift subdirs
+ done
+
+ return $stat
+}
+
+zfput_sub $*
+stat=$?
(( $do_close )) && zfclose