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
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=?");
$writer->endTag("file");
}
$writer->endTag("backup");
- }
+ }
$writer->endTag("archive");
$writer->end();
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)
$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) {