zsh-workers
 help / color / mirror / code / Atom feed
From: Baptiste Daroussin <baptiste.daroussin@gmail.com>
To: zsh-workers@sunsite.dk
Subject: [PATCH] Remove perl dependency in zftp
Date: Fri, 11 Sep 2009 10:37:32 +0000	[thread overview]
Message-ID: <ed7b1c610909110337g30525e9bxdd5b4146a17f3a@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 111 bytes --]

Hi,

Here is a patch to remove the perl dependency in the zfrtime of zftp

Seems to work for me

regards,
Bapt

[-- Attachment #2: zfrtime-remove-perl.patch --]
[-- Type: application/octet-stream, Size: 1871 bytes --]

diff --git a/Functions/Zftp/zfrtime b/Functions/Zftp/zfrtime
index f63ffe0..be95c43 100644
--- a/Functions/Zftp/zfrtime
+++ b/Functions/Zftp/zfrtime
@@ -10,8 +10,10 @@
 # with the standard library.
 
 emulate -L zsh
+zmodload zsh/datetime
 
-local time gmtime loctime
+local time gmtime loctime year mon mday hr min sec y tmpdate
+local -i days_since_epoch
 
 if [[ -n $3 ]]; then
   time=$3
@@ -21,25 +23,19 @@ else
 fi
 [[ -z $time ]] && return 1
 
-# Now's the real *!@**!?!.  We have the date in GMT and want to turn
-# it into local time for touch to handle.  It's just too nasty
-# to handle in zsh; do it in perl.
-if perl -mTime::Local -e '($file, $t) = @ARGV;
-$yr = substr($t, 0, 4) - 1900;
-$mon = substr($t, 4, 2) - 1;
-$mday = substr($t, 6, 2) + 0;
-$hr = substr($t, 8, 2) + 0;
-$min = substr($t, 10, 2) + 0;
-$sec = substr($t, 12, 2) + 0;
-$time = Time::Local::timegm($sec, $min, $hr, $mday, $mon, $yr);
-utime $time, $time, $file and return 0;' $1 $time 2>/dev/null; then
-  print "Setting time for $1 failed.  Need perl 5." 2>1
-fi
-
-# If it wasn't for the GMT/local time thing, it would be this simple.
-#
-# time="${time[1,12]}.${time[13,14]}"
-#
-# touch -t $time $1
+year=$time[1,4]
+mon=$time[5,6]
+mday=$time[7,8]
+hr=$time[9,10]
+min=$time[11,12]
+sec=$time[13,14]
 
-# }
+#count the number of days since epoch without the current day
+for y ({1970..$(( $year - 1))}){ strftime -s tmpdate -r "%Y/%m/%d" ${y}/12/31; days_since_epoch+=$(strftime "%j" $tmpdate) }
+strftime -s tmpdate -r "%Y/%m/%d" $year/$mon/$(( $mday - 1 ))
+days_since_epoch+=$(strftime "%j" $tmpdate)
+# convert the time in number of seconds (this should be equivalent to timegm)
+time=$(( $sec + 60 * ( $min + 60 * ($hr + 24 * $days_since_epoch))  ))
+#Convert it back to CCYYMMDDhhmmSS
+strftime -s time "%Y%m%d%H%M%S" ${EPOCHSECONDS}
+touch -t ${time[1,12]}.${time[13,14]} $1

             reply	other threads:[~2009-09-11 10:37 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-11 10:37 Baptiste Daroussin [this message]
2009-09-11 10:58 ` Peter Stephenson
2009-09-11 11:09   ` Baptiste Daroussin

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=ed7b1c610909110337g30525e9bxdd5b4146a17f3a@mail.gmail.com \
    --to=baptiste.daroussin@gmail.com \
    --cc=zsh-workers@sunsite.dk \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).