X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fbackuplib.pl;fp=backup%2Fbackuplib.pl;h=b537f2ff7544874d6693141f8f851cf7630d305f;hp=ddeb5bbb4bd9b9243b80c33403fdd0223d732f1b;hb=3132b6c3eebf3f16d43c2189fc9be5e52a6b2018;hpb=e912e652c5a4d03307b47a209baa6dec5877ae45 diff --git a/backup/backuplib.pl b/backup/backuplib.pl index ddeb5bb..b537f2f 100644 --- a/backup/backuplib.pl +++ b/backup/backuplib.pl @@ -173,8 +173,6 @@ sub parsefsys () { $dopts= $3; $prefix= ''; $pcstr= ''; - stat $atf or die "stat $atf: $!"; - -d _ or die "not a dir: $atf"; $rstr= ''; } elsif ($tf =~ m#^(/\S*)\s+(\w+)([,=0-9a-z]*)\s+(\w+)$#) { # Line of form '[/device:]/file/system dumptype[,options] prefix' @@ -197,11 +195,16 @@ sub parsefsys () { $dev = $atf =~ s,^(.*)\:,, ? $1 : ''; + if (!length $pcstr) { + stat $atf or die "stat $atf: $!"; + -d _ or die "not a dir: $atf"; + } + undef %dopt; foreach $dopt (split /\,/,$dopts) { if (grep { $dopt eq $_ } qw(gz)) { $dopt{$dopt}= 'y'; - if (grep { $dopt eq $_ } qw(snap)) { + } elsif (grep { $dopt eq $_ } qw(snap)) { $dopt{$dopt}= $dopt; } elsif ($dopt =~ m/\=/ && grep { $` eq $_ } qw(gz snap)) { $dopt{$`}= $'; @@ -222,6 +225,10 @@ sub parsefsys () { $$gzo= ''; } } + + if (length $dopt{'snap'}) { + length $dev or die "$pcstr:$atf no device but needed for snap"; + } } sub execute ($) { @@ -230,14 +237,19 @@ sub execute ($) { } sub prepfsys () { + $dev_print= $dev; + $atf_print= $atf; + if (length $dopt{'snap'}) { + system('snap-drop'); $? and die $?; $snapscripts= '/etc/chiark-backup/snap'; - $snapbase= "$rstr $snapscripts/$dopt{'snap'} /var/lib/chiark-backup"; + $snapbase= "$rstr $snapscripts/$dopt{'snap'}"; + $snapargs= "/var/lib/chiark-backup"; - $snapsnap= "$snapbase snap $dev $atf"; - $snapdrop= "$snapbase drop"; + $snapsnap= "$snapbase snap $snapargs $dev $atf"; + $snapdrop= "$snapbase drop $snapargs"; open SD, ">snap-drop.new" or die $!; print SD $snapdrop,"\n" or die $!;