Ticket #4677: findorphans_rerecord.diff

File findorphans_rerecord.diff, 3.3 KB (added by David George <david@…>, 12 years ago)
  • contrib/myth.find_orphans.pl

     
    44#   based somewhat on greg froese's "myth.rebuilddatabase.pl"
    55#   -- Lincoln Dale <ltd@interlink.com.au>, September 2006
    66# 2007-03-11:  Added pretty print of unknown files vs. orphaned thumbnails. (Robert Kulagowski)
     7# 2008-02-15:  Added dryrun and rerecord options (David George)
    78
    89#  The intent of this script is to be able to find orphaned rows in the 'recorded' table
    910#  (entries which don't have matching media files) and orphaned media files (potentially
     
    2526#  and sets mythtv to fill up all your disk space with The Home Shopping Network, its entirely
    2627#  your fault.
    2728
     29# The dryrun option will allow you to see the db entries/files that will be deleted without
     30# actually executing them.
     31# The rerecord option is useful if you lose a hard drive in your storage group to tell
     32# the scheduler to re-record the lost programs (if they happen to be shown again).
     33
    2834my $progname = "myth.find_orphans.pl";
    29 my $revision = "0.20";
     35my $revision = "0.21";
    3036
    3137use DBI;
    3238use Sys::Hostname;
     
    4753my $opt_dodbdelete =    0;
    4854my $debug =             0;
    4955my $opt_help =          0;
     56my $opt_dryrun =        0;
     57my $opt_rerecord =      0;
    5058
    5159GetOptions(
    5260        'host=s'        => \$opt_host,
     
    5765        'dir=s'         => \$opt_dir,
    5866        'dodelete'      => \$opt_dodelete,
    5967        'dodbdelete'    => \$opt_dodbdelete,
     68        'dryrun'        => \$opt_dryrun,
     69        'rerecord'      => \$opt_rerecord,
    6070        'debug+'        => \$debug,
    6171        'help'          => \$opt_help,
    6272        'h'             => \$opt_help,
     
    7787        --debug                 increase debug level
    7888        --dodbdelete            remove recorded db entries with no matching file (default: don't)
    7989        --dodelete              delete files with no record (default: don't)
     90        --dryrun                display delete actions without doing them
     91        --rerecord              set db entries to re-record missing files (requires --dodbdelete)
    8092
    8193EOF
    8294;
     
    138150                if ($opt_dodbdelete) {
    139151                        my $sql = sprintf "DELETE FROM recorded WHERE basename LIKE \"%s\" LIMIT 1",$basename;
    140152                        printf "performing database delete: %s\n",$sql;
    141                         $dbh->do($sql) || die "Could not execute $sql: $!\n";
     153                        if (!$opt_dryrun) {
     154                                $dbh->do($sql) || die "Could not execute $sql: $!\n";
     155                        }
     156
     157                        if ($opt_rerecord) {
     158                                my $sql = sprintf "UPDATE oldrecorded SET duplicate = 0 where title = \"%s\" and starttime = \"%s\" and chanid = \"%s\"",
     159                                        $title, $starttime, $channel;
     160                                printf "updating oldrecorded: %s\n", $sql;
     161                                if (!$opt_dryrun) {
     162                                        $dbh->do($sql) || die "Could not execute $sql: $!\n";
     163                                }
     164                        }
    142165                }
    143166        } else {
    144167                $valid_recordings++;
     
    171194                                                                                                         
    172195                                if ($opt_dodelete) {
    173196                                        printf STDERR "deleting  [%s]:  %s/%s\n",pretty_filesize($this_filesize),$this_dir,$this_file;
    174                                         unlink "$this_dir/$this_file";
    175197
    176                                         if (-f "$this_dir/$this_file") {
    177                                                 $errors++;
    178                                                 printf "ERROR: could not delete $this_dir/$this_file\n";
     198                                        if (!$opt_dryrun) {
     199                                                unlink "$this_dir/$this_file";
     200
     201                                                if (-f "$this_dir/$this_file") {
     202                                                        $errors++;
     203                                                        printf "ERROR: could not delete $this_dir/$this_file\n";
     204                                                }
    179205                                        }
    180206                                }
    181207                        } else {