From a525aee351bac7ce7f5a952ab8e6aef12e8e83b4 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Fri, 28 Oct 2016 06:46:52 +0000 Subject: [PATCH] update/restore: save & restore the configuration files too. git-svn-id: https://svn.fhem.de/fhem/trunk@12450 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_restore.pm | 36 +++++++++++++++++++++++------------- fhem/FHEM/98_update.pm | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/fhem/FHEM/98_restore.pm b/fhem/FHEM/98_restore.pm index 29c45bb8a..fd3db676c 100644 --- a/fhem/FHEM/98_restore.pm +++ b/fhem/FHEM/98_restore.pm @@ -7,8 +7,8 @@ use warnings; use File::Copy qw(cp); sub CommandUpdate($$); -sub restoreFile($$); -sub restoreDir($$); +sub restoreFile($$$); +sub restoreDir($$$); ######################################## sub @@ -29,12 +29,14 @@ CommandRestore($$) my @args = split(/ +/,$param); my $list = (@args > 0 && $args[0] eq "list"); shift @args if($list); + my $all = (@args > 0 && $args[0] eq "-a"); + shift @args if($all); my $filename = shift @args; my $dest = $attr{global}{modpath}; my $src = "$dest/restoreDir"; $list = 1 if(!$list && !$filename); - return "Usage: restore [list] filename|directory" + return "Usage: restore [-a|list] filename|directory" if(@args); $filename = "" if(!$filename); @@ -58,30 +60,34 @@ CommandRestore($$) $src = "$src/$filename"; $dest = "$dest/$2" if($2); - return (-f $src ? restoreFile($src, $dest) : restoreDir($src, $dest)). + return (-f $src ? restoreFile($src,$dest,$all) : restoreDir($src,$dest,$all)). "\n\nrestore finished"; } sub -restoreFile($$) +restoreFile($$$) { - my ($src, $dest) = @_; + my ($src, $dest, $all) = @_; + if((index($dest,$attr{global}{configfile}) >= 0 || + index($dest,$attr{global}{statefile}) >= 0 ) && !$all) { + return "skipping $dest"; + } cp($src, $dest) || return "cp $src $dest failed: $!"; return "restore $dest"; } sub -restoreDir($$) +restoreDir($$$) { - my ($src, $dest, $dh, @ret) = @_; + my ($src, $dest, $all, $dh, @ret) = @_; opendir($dh, $src) || return "opendir $src: $!"; my @files = sort grep { $_ ne "." && $_ ne ".." } readdir($dh); closedir($dh); foreach my $f (@files){ if(-d "$src/$f") { - push @ret, restoreDir("$src/$f", "$dest/$f"); + push @ret, restoreDir("$src/$f", "$dest/$f", $all); } else { - push @ret, restoreFile("$src/$f", "$dest/$f"); + push @ret, restoreFile("$src/$f", "$dest/$f", $all); } } return join("\n", @ret); @@ -98,12 +104,14 @@ restoreDir($$)
restore list [<filename|directory>]
+ restore [-a|list] [<filename|directory>]
restore [<filename|directory>]
Restore the files saved previously by the update command. Check the available
files with the list argument. See also the update command and its restoreDirs
- attribute. After a restore normally a "shutdown restart" is necessary.
+ attribute. After a restore normally a "shutdown restart" is necessary.
+ If the -a option is specified, the configuration files are also restored.
+