added consistency check
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Thu, 26 Jan 2006 00:39:47 +0000 (00:39 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Thu, 26 Jan 2006 00:39:47 +0000 (00:39 +0000)
git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@292 8392b6e1-25fa-0310-8288-cc32f8e212ea

bin/BackupPC_burnArchiveCLI

index 4c029c1..cd54e42 100755 (executable)
@@ -16,7 +16,7 @@ use Data::Dumper;
 
 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 @@ sub dumpArchive2XML($$$)
                        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 @@ sub dumpArchive2XML($$$)
                        $writer->endTag("file");
                }
                $writer->endTag("backup");
-       }       
+       }
                         
        $writer->endTag("archive");
        $writer->end(); 
@@ -310,6 +312,15 @@ my $sth_archive_backup_parts = $dbh->prepare( qq{
        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 @@ foreach my $arc (@archives_to_burn) {
 
        $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) {