X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FdeleteArchivedFiles.php;h=85ffc23b7842cf121edd6fb781eee9c61adc04f0;hb=95e5d904f60e7f5efa92fd83416dcd8fcd5cfaca;hp=678af5e033f4c94c7441775ebde834a9f77fe263;hpb=567f244e3611c9e020bc69446a77a10c21257f84;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/deleteArchivedFiles.php b/maintenance/deleteArchivedFiles.php index 678af5e033..85ffc23b78 100644 --- a/maintenance/deleteArchivedFiles.php +++ b/maintenance/deleteArchivedFiles.php @@ -1,8 +1,9 @@ mDescription = "Deletes all archived images."; $this->addOption( 'delete', 'Perform the deletion' ); + $this->addOption( 'force', 'Force deletion of rows from filearchive' ); + } + + public function handleOutput( $str ) { + return $this->output( $str ); } - /** - * @todo @fixme FSTransaction/FileStore crap needs removing. Does - * not work on trunk - */ public function execute() { - if( !$this->hasOption('delete') ) { + if ( !$this->hasOption( 'delete' ) ) { $this->output( "Use --delete to actually confirm this script\n" ); return; } - # Data should come off the master, wrapped in a transaction - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); - $tbl_arch = $dbw->tableName( 'filearchive' ); - $repo = RepoGroup::singleton()->getLocalRepo(); - # Get "active" revisions from the filearchive table - $this->output( "Searching for and deleting archived files...\n" ); - $res = $dbw->query( "SELECT fa_id,fa_storage_group,fa_storage_key FROM $tbl_arch" ); - $count = 0; - while( $row = $dbw->fetchObject( $res ) ) { - $key = $row->fa_storage_key; - $group = $row->fa_storage_group; - $id = $row->fa_id; - $path = $repo->getZonePath( 'deleted' ).'/'.$repo->getDeletedHashPath($key).$key; - $sha1 = substr( $key, 0, strcspn( $key, '.' ) ); - // Check if the file is used anywhere... - $inuse = $dbw->selectField( 'oldimage', '1', - array( 'oi_sha1' => $sha1, - 'oi_deleted & '.File::DELETED_FILE => File::DELETED_FILE ), - __METHOD__, - array( 'FOR UPDATE' ) - ); - if ( $path && file_exists($path) && !$inuse ) { - unlink($path); // delete - $count++; - $dbw->query( "DELETE FROM $tbl_arch WHERE fa_id = $id" ); - } else { - $this->output( "Notice - file '$key' not found in group '$group'\n" ); - } - } - $dbw->commit(); - $this->output( "Done! [$count file(s)]\n" ); + $force = $this->hasOption( 'force' ); + DeleteArchivedFilesImplementation::doDelete( $this, $force ); } } $maintClass = "DeleteArchivedFiles"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN );