2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

fhem.pl: restoreDri restructured (Forum #85801)

git-svn-id: https://svn.fhem.de/fhem/trunk@16426 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2018-03-17 16:23:45 +00:00
parent 4bf7c90037
commit 54caab4aaf
4 changed files with 22 additions and 16 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- fhem.pl: restoreDir restructured (Forum #85801)
- added: 88_xs1Bridge: added blacklist function - added: 88_xs1Bridge: added blacklist function
- feature: 93_DbLog: V3.9.0, syntax of attribute excludeDevs enhanced - feature: 93_DbLog: V3.9.0, syntax of attribute excludeDevs enhanced
- update: 39_Talk2Fhem: Timephrases added, bugfixes and some changes - update: 39_Talk2Fhem: Timephrases added, bugfixes and some changes

View File

@ -27,15 +27,20 @@ CommandRestore($$)
{ {
my ($cl,$param) = @_; my ($cl,$param) = @_;
my @args = split(/ +/,$param); my @args = split(/ +/,$param);
my $list = (@args > 0 && $args[0] eq "list");
shift @args if($list); my $list;
my $all = (@args > 0 && $args[0] eq "-a"); $list = shift(@args) if(@args > 0 && $args[0] eq "list");
shift @args if($all);
my $filename = shift @args; my $all;
$all = shift @args if(@args > 0 && $args[0] eq "-a");
my $filename;
$filename = shift @args if(@args > 0 && $args[0] !~ m/^-/);
my $dest = $attr{global}{modpath}; my $dest = $attr{global}{modpath};
my $src = "$dest/restoreDir"; my $src = "$dest/restoreDir";
$list = 1 if(!$list && !$filename); $list = 1 if(!$list && (!$filename || $filename !~ m/20\d\d-\d\d-\d\d/));
return "Usage: restore [-a|list] filename|directory" return "Usage: restore [-a|list] filename|directory"
if(@args); if(@args);
@ -55,13 +60,11 @@ CommandRestore($$)
return "$filename is not available for restore" if(!-e "$src/$filename"); return "$filename is not available for restore" if(!-e "$src/$filename");
$filename .= "/" if($filename !~ m,/,); # needed for the regexp below
$filename =~ m,^([^/]*)/(.*)$,;
$src = "$src/$filename"; $src = "$src/$filename";
$dest = "$dest/$2" if($2); $dest = "$dest/$1" if($filename =~ m,20\d\d-\d\d-\d\d/(.*)$,);
return (-f $src ? restoreFile($src,$dest,$all) : restoreDir($src,$dest,$all)). return (-f $src ? restoreFile($src,$dest,$all) :
"\n\nrestore finished"; restoreDir( $src,$dest,$all) ). "\n\nrestore finished";
} }
sub sub

View File

@ -271,7 +271,7 @@ doUpdate($$$$)
########################### ###########################
# read in & digest the local control file # read in & digest the local control file
my $root = $attr{global}{modpath}; my $root = $attr{global}{modpath};
my $restoreDir = ($arg eq "check" ? "" : restoreDir_init()); my $restoreDir = ($arg eq "check" ? "" : restoreDir_init("update"));
my @locList; my @locList;
if(($arg eq "check" || $arg eq "all") && if(($arg eq "check" || $arg eq "all") &&

View File

@ -143,7 +143,7 @@ sub readingsDelete($$);
sub redirectStdinStdErr(); sub redirectStdinStdErr();
sub rejectDuplicate($$$); sub rejectDuplicate($$$);
sub resolveAttrRename($$); sub resolveAttrRename($$);
sub restoreDir_init(); sub restoreDir_init(;$);
sub restoreDir_rmTree($); sub restoreDir_rmTree($);
sub restoreDir_saveFile($$); sub restoreDir_saveFile($$);
sub restoreDir_mkDir($$$); sub restoreDir_mkDir($$$);
@ -1591,7 +1591,7 @@ CommandSave($$)
return; return;
} }
my $restoreDir; my $restoreDir;
$restoreDir = restoreDir_init() if(!configDBUsed()); $restoreDir = restoreDir_init("save") if(!configDBUsed());
@structChangeHist = (); @structChangeHist = ();
DoTrigger("global", "SAVE", 1); DoTrigger("global", "SAVE", 1);
@ -5404,8 +5404,9 @@ restoreDir_rmTree($)
} }
sub sub
restoreDir_init() restoreDir_init($)
{ {
my ($subDir) = @_;
my $root = $attr{global}{modpath}; my $root = $attr{global}{modpath};
my $nDirs = AttrVal("global","restoreDirs", 3); my $nDirs = AttrVal("global","restoreDirs", 3);
@ -5416,6 +5417,7 @@ restoreDir_init()
return "" if($nDirs == 0); return "" if($nDirs == 0);
my $rdName = "restoreDir"; my $rdName = "restoreDir";
$rdName .= "/$subDir" if($subDir);
my @t = localtime(gettimeofday()); my @t = localtime(gettimeofday());
my $restoreDir = sprintf("$rdName/%04d-%02d-%02d", my $restoreDir = sprintf("$rdName/%04d-%02d-%02d",
$t[5]+1900, $t[4]+1, $t[3]); $t[5]+1900, $t[4]+1, $t[3]);
@ -5426,7 +5428,7 @@ restoreDir_init()
Log 1, "opendir $root/$rdName: $!"; Log 1, "opendir $root/$rdName: $!";
return ""; return "";
} }
my @oldDirs = sort grep { $_ !~ m/^\./ && $_ ne $restoreDir } readdir(DH); my @oldDirs = sort grep { $_ =~ m/^20\d\d-\d\d-\d\d/ } readdir(DH);
closedir(DH); closedir(DH);
while(int(@oldDirs) > $nDirs) { while(int(@oldDirs) > $nDirs) {
my $dir = "$root/$rdName/". shift(@oldDirs); my $dir = "$root/$rdName/". shift(@oldDirs);