From 0eebab379aa161f1cc6007605284db2c4a45b21a Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Sun, 26 Jun 2011 11:20:14 +0000
Subject: [PATCH] fhemupdate

git-svn-id: https://svn.fhem.de/fhem/trunk@922 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
 fhem/contrib/fhemupdate.pl | 76 ++++++++++++++++++++++++++++++++++++++
 fhem/docs/commandref.html  |  8 ++--
 2 files changed, 80 insertions(+), 4 deletions(-)
 create mode 100755 fhem/contrib/fhemupdate.pl

diff --git a/fhem/contrib/fhemupdate.pl b/fhem/contrib/fhemupdate.pl
new file mode 100755
index 000000000..28c77c121
--- /dev/null
+++ b/fhem/contrib/fhemupdate.pl
@@ -0,0 +1,76 @@
+#!/usr/bin/perl
+
+# Server-Side script to check out the fhem CVS repository, and upload the
+# changed files to the server
+
+print localtime() . "\n";
+
+chdir("/home/rudi/fhemupdate/fhem");
+system("mkdir -p UPLOAD");
+system("cvs update . > /dev/null 2>&1");
+die "CVS failed, exiting\n" if($?);
+
+my @filelist = (
+ "./fhem.pl",
+ "FHEM/.*.pm",
+ "webfrontend/pgm2/.*",
+ "docs/commandref.html",
+ "docs/faq.html",
+ "docs/HOWTO.html",
+ "docs/fhem.*.png",
+ "docs/.*.jpg",
+);
+
+# Read in the file timestamps
+my %filetime;
+my %filesize;
+my %filedir;
+foreach my $fspec (@filelist) {
+  $fspec =~ m,^(.+)/([^/]+)$,;
+  my ($dir,$pattern) = ($1, $2);
+  opendir DH, $dir || die("Can't open $dir: $!\n");
+  foreach my $file (grep { /$pattern/ && -f "$dir/$_" } readdir(DH)) {
+    my @st = stat("$dir/$file");
+    my @mt = localtime($st[9]);
+    $filetime{$file} = sprintf "%04d-%02d-%02d_%02d:%02d:%02d",
+                $mt[5]+1900, $mt[4]+1, $mt[3], $mt[2], $mt[1], $mt[0];
+    $filesize{$file} = $st[7];
+    $filedir{$file} = $dir;
+  }
+  closedir(DH);
+}
+
+my %oldtime;
+if(open FH, "UPLOAD/filetimes.txt") {
+  while(my $l = <FH>) {
+    chomp($l);
+    my ($ts, $fs, $file) = split(" ", $l, 3);
+    $oldtime{$file} = $ts;
+  }
+  close(FH);
+}
+
+chdir("UPLOAD");
+open FH, ">filetimes.txt" || die "Can't open filetimes.txt: $!\n";
+open FTP, ">script.txt" || die "Can't open script.txt: $!\n";
+print FTP "cd fhem.de/fhemupdate\n";
+print FTP "put filetimes.txt\n";
+print FTP "pas\n";      # Without passive only 28 files can be transferred
+my $cnt;
+foreach my $f (sort keys %filetime) {
+  print FH "$filetime{$f} $filesize{$f} $f\n";
+  my $newfname = $f;
+  $newfname .= ".txt" if($newfname =~ m/.pl$/); # Cant download .pl files
+  if(!$oldtime{$f} || $oldtime{$f} ne $filetime{$f}) {
+    print FTP "put $newfname\n";
+    system("cp ../$filedir{$f}/$f $newfname");
+    $cnt++;
+  }
+}
+close FH;
+close FTP;
+
+if($cnt) {
+  print "FTP Upload needed for $cnt files\n";
+  system("ftp -e fhem.de < script.txt");
+}
diff --git a/fhem/docs/commandref.html b/fhem/docs/commandref.html
index 9a12543b3..64210b330 100644
--- a/fhem/docs/commandref.html
+++ b/fhem/docs/commandref.html
@@ -46,7 +46,6 @@
       <a href="#help">?,help</a> &nbsp;
       <a href="#include">include</a> &nbsp;
       <a href="#inform">inform</a> &nbsp;
-      <a href="#fhemupdate">fhemupdate</a> &nbsp;
       <a href="#list">list</a> &nbsp;
       <a href="#modify">modify</a> &nbsp;
       <a href="#quit">quit</a> &nbsp;
@@ -60,6 +59,7 @@
       <a href="#shutdown">shutdown</a> &nbsp;
       <a href="#sleep">sleep</a> &nbsp;
       <a href="#trigger">trigger</a> &nbsp;
+      <a href="#updatefhem">updatefhem</a> &nbsp;
       <a href="#xmllist">xmllist</a> &nbsp;
 
   </ul>
@@ -528,10 +528,10 @@ A line ending with \ will be concatenated with the next one, so long lines
   <br>
 </ul>
 
-<a name="fhemupdate"></a>
-<h3>fhemupdate</h3>
+<a name="updatefhem"></a>
+<h3>updatefhem</h3>
 <ul>
-  <code>fhemupdate [filename]</code> <br>
+  <code>updatefhem [filename]</code> <br>
   <br>
     Update the fhem modules and documentation from a nightly CVS chekout.  For
     this purpose fhem contants http://fhem.de, compares the stored timestamps