X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fbackuplib.pl;h=50cc70a745f9aa070ed6778f12e3455c3df1303a;hp=279cbd6ec0e782c2355df1693d841aa2794bf497;hb=6e9e36a3b3f4176c2b2ac9584d4deea6f1f5c55d;hpb=c9864d70f390dc1e16c7f1d744f15a2a008f5ce8 diff --git a/backup/backuplib.pl b/backup/backuplib.pl index 279cbd6..50cc70a 100644 --- a/backup/backuplib.pl +++ b/backup/backuplib.pl @@ -23,6 +23,8 @@ require IO::File; +$nice='nice ' if !defined $nice; + sub printdate () { print scalar(localtime),"\n"; } @@ -141,35 +143,53 @@ sub readfsys ($) { # to be in $tf. sub parsefsys () { my ($dopts,$dopt); - if ($tf =~ m#^(/\S*)\s+(\w+)([,0-9a-z]+)$#) { - # Line of form '/file/system dumptype[,options]' + if ($tf =~ m#^(/\S*)\s+(\w+)([,=0-9a-z]*)$#) { + # Line of form '[/device:]/file/system dumptype[,options]' $atf= $1; $tm= $2; $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 '/file/system dumptype[,options] prefix' + } elsif ($tf =~ m#^(/\S*)\s+(\w+)([,=0-9a-z]*)\s+(\w+)$#) { + # Line of form '[/device:]/file/system dumptype[,options] prefix' # (used for remote backups) $atf= $1; $tm= $2; $dopts= $3; $prefix= $4; + $pcstr= "$prefix:"; defined($prefix{$prefix}) or die "prefix $prefix in $tf ?\n"; $rstr= $prefix{$prefix}.' '; } else { die "fsys $tf ?"; } + + $dev = $atf =~ s,^(.*)\:,, ? $1 : ''; + undef %dopt; foreach $dopt (split /\,/,$dopts) { if (grep { $dopt eq $_ } qw(gz)) { $dopt{$dopt}= 'y'; } elsif ($dopt =~ m/\=/ && grep { $` eq $_ } qw(gz)) { $dopt{$`}= $'; + } elsif (length $dopt) { + die "unknown option $dopt (in $dopts $tf)"; + } + } + + my ($gzo); + foreach $gzo (qw(gz gzi)) { + if ($dopt{$gzo} eq 'y') { + $$gzo= '1'; + } elsif ($dopt{$gzo} =~ m/^\d$/) { + $$gzo= $dopt{$gzo}; + } elsif (defined $dopt{$gzo}) { + die "$tf bad $gzo"; } else { - die "unknown option $dopt"; + $$gzo= ''; } } }