X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Fbackuplib.pl;h=c2c7e811ff6ab82e8b2ead83769d681de42d3db7;hp=e80f779ca0a6d77d8988d5ce85800c589a1a1626;hb=f163dbe381968d1ad2fc8fd13455e7b5fb03bdf5;hpb=411308a50c3cbc923513c18f876bf88909bd7786 diff --git a/backup/backuplib.pl b/backup/backuplib.pl index e80f779..c2c7e81 100644 --- a/backup/backuplib.pl +++ b/backup/backuplib.pl @@ -64,9 +64,9 @@ sub readtapeid_raw () { "| tar -b$blocksize -vvxf - TAPEID"; } -sub writetapeid ($) { +sub writetapeid ($$) { open T, ">TAPEID" or die $!; - print T "$_[0]\n" or die $!; + print T "$_[0]\n$_[1]\n" or die $!; close T or die $!; system "tar -b$blocksize -vvcf TAPEID.tar TAPEID"; $? and die $?; @@ -140,22 +140,37 @@ sub readfsys ($) { # Parse a line from a filesystem definition file. We expect the line # to be in $tf. sub parsefsys () { - if ($tf =~ m,^(/\S*)\s+(\w+)$,) { - # Line of form '/file/system dumptype' + my ($dopts,$dopt); + if ($tf =~ m,^(/\S*)\s+(\w+)([,0-9a-z]+)$,) { + # Line of form '/file/system dumptype[,options]' $atf= $1; $tm= $2; + $dopts= $3; $prefix= ''; stat $atf or die "stat $atf: $!"; -d _ or die "not a dir: $atf"; $rstr= ''; - } elsif ($tf =~ m,^(/\S*)\s+(\w+)\s+(\w+)$,) { - # Line of form '/file/system dumptype prefix' - # (used for remote backups, I think) + } elsif ($tf =~ m,^(/\S*)\s+(\w+)([,0-9a-z]+)\s+(\w+)$,) { + # Line of form '/file/system dumptype[,options] prefix' + # (used for remote backups) $atf= $1; $tm= $2; - $prefix= $3; + $dopts= $3; + $prefix= $4; defined($prefix{$prefix}) or die "prefix $prefix in $tf ?\n"; $rstr= $prefix{$prefix}.' '; + } else { + die "fsys $tf ?"; + } + undef %dopt; + foreach $dopt (split /\,/,$dopts) { + if (grep { $dopt eq $_ } qw(gz)) { + $dopt{$dopt}= 'y'; + } elsif ($dopt =~ m/\=/ && grep { $` eq $_ } qw(gz)) { + $dopt{$`}= $'; + } else { + die "unknown option $dopt"; + } } }