X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=bin%2FBackupPC_burnArchiveCLI;h=4c029c1308a07cc3f1bae79ed6282fc182e3717a;hb=cc69bd9efd1cfb510eeb3739ff47436a3a6d1f09;hp=27a8dac390bf9c88401c90ddc9cb52c8f02b0763;hpb=263c76fb18863014b37724ca3b34ccedbd200b00;p=BackupPC.git diff --git a/bin/BackupPC_burnArchiveCLI b/bin/BackupPC_burnArchiveCLI index 27a8dac..4c029c1 100755 --- a/bin/BackupPC_burnArchiveCLI +++ b/bin/BackupPC_burnArchiveCLI @@ -1,8 +1,7 @@ #!/usr/bin/perl use strict; -#use lib "__INSTALLDIR__/lib"; -use lib "/data/backuppc-agi/lib"; +use lib "__INSTALLDIR__/lib"; use DBI; use BackupPC::Lib; @@ -16,6 +15,8 @@ use File::Path; use Data::Dumper; my $debug = 0; +# set this to 1 to prompt for DVD removal for each selected item. +my $prompt_for_delete = 0; $|=1; # don't check for user @@ -254,6 +255,39 @@ sub add_symlink($$) { symlink $from, $to || skip("can't symlink $from to $to: $!"); } +sub delete_dvd($) { + my $dvd_nr = shift || return; + + print "Do you want to delete DVD #$dvd_nr now? [NO/yes]: "; + my $ok = ; + chomp($ok); + if (lc($ok) eq 'yes') { + print "Deleting DVD #$dvd_nr from database...\n"; + + $dbh->begin_work; + + my $sth_delete_dvd = $dbh->prepare( qq{ + delete from archive where dvd_nr = ? + } ); + $sth_delete_dvd->execute( $dvd_nr ); + $dbh->do( qq{ + select setval('dvd_nr', (select max(dvd_nr) from archive), true) + } ); + + # remove files for this DVD + map { + print "\tremoving $_\n"; + unlink($_) || die "can't rm $_: $!"; + } glob ( "/$iso_dir/$dvd_nr.*" ); + + $dbh->commit; + + return 1; + } else { + return 0; + } +} + my $sth_archive_backup_parts = $dbh->prepare( qq{ select archive_backup.backup_id, @@ -296,6 +330,15 @@ foreach my $arc (@archives_to_burn) { $sth_archive_backup_parts->execute($dvd_nr); + if ($sth_archive_backup_parts->rows == 0) { + warn "ERROR: no backup parts found for $dvd_nr. You should re-create that DVD.\n"; + delete_dvd( $dvd_nr ); + } + + if ($prompt_for_delete) { + next if delete_dvd( $dvd_nr ); + } + my @volumes; my $v; # emtpy volume my $v_size = 0; @@ -318,17 +361,19 @@ foreach my $arc (@archives_to_burn) { } push @volumes, $v if ($v); + #warn "# volumes: ",Dumper(\@volumes),"\n"; + my $volumes = $#volumes + 1; my $volume_nr = 1; foreach my $v (@volumes) { - print Dumper($v); + #print Dumper($v); my $iso_size = 0; my $disk_name = $dvd_nr; # suffix added to multi-volume archives - my $volume_suffix = $dvd_nr; + my $volume_suffix = ''; if ($volumes > 1) { $volume_suffix = '_' . $volume_nr; @@ -369,8 +414,8 @@ foreach my $arc (@archives_to_burn) { my $rel_path = $tar_file; if (-d "$tar_dir/$rel_path") { - $rel_path .= '/' . $p->{part_nr}; mkpath("$stage/$rel_path") unless (-d "$stage/$rel_path"); + $rel_path .= '/' . $p->{part_nr}; } $rel_path .= '.tar.gz'; @@ -410,8 +455,7 @@ foreach my $arc (@archives_to_burn) { print "Created $iso_file [$iso_size bytes] in ", fmt_time(time() - $t), "\n"; - # FIXME - #rmtree($stage) || warn "can't remove stage directory $stage: $!"; + rmtree($stage) || warn "can't remove stage directory $stage: $!"; } else { print "ISO $iso_file allready exists\n";