--- trunk/bin/BackupPC_burnArchiveCLI 2006/01/26 00:38:14 291 +++ trunk/bin/BackupPC_burnArchiveCLI 2006/01/26 00:39:47 292 @@ -16,7 +16,7 @@ my $debug = 0; # set this to 1 to prompt for DVD removal for each selected item. -my $prompt_for_delete = 0; +my $prompt_for_delete = shift @ARGV; $|=1; # don't check for user @@ -111,6 +111,8 @@ AND hosts.id=backups.hostid AND shares.id=backups.shareid AND archive_backup.archive_id = ? + ORDER BY + hosts.name, shares.name, backups.num }; my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?"); @@ -164,7 +166,7 @@ $writer->endTag("file"); } $writer->endTag("backup"); - } + } $writer->endTag("archive"); $writer->end(); @@ -310,6 +312,15 @@ order by archive_backup.backup_id, backup_parts.part_nr }); +my $sth_archive_backup_check = $dbh->prepare( qq{ + SELECT + count(backups.id) + FROM backups + JOIN archive_backup on archive_backup.backup_id = backups.id + JOIN archive on archive_id = archive.id + WHERE dvd_nr = ? +}); + my $sth_archive_burned = $dbh->prepare( qq{ insert into archive_burned (archive_id, iso_size, part, copy) @@ -330,9 +341,20 @@ $sth_archive_backup_parts->execute($dvd_nr); + $sth_archive_backup_check->execute($dvd_nr); + + my ($parts_nr, $check_nr) = ($sth_archive_backup_parts->rows, $sth_archive_backup_check->fetchrow_array); + + if ($parts_nr != $check_nr) { + warn "ERROR: DVD #$dvd_nr is still not in consistent state. Some backup parts are ", + ($parts_nr < $check_nr) ? "missing ($parts_nr < $check_nr)" : "extra ($parts_nr > $check_nr)", + " you should re-create this DVD after BackupPC_incPartsUpdate finish\n"; + next if delete_dvd( $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 ); + next if delete_dvd( $dvd_nr ); } if ($prompt_for_delete) {