X-Git-Url: http://git.cyclocoop.org/fichier?a=blobdiff_plain;f=maintenance%2FdeleteArchivedFiles.php;h=d010073b90edb4ec3f94a85cd357ea04810b0d3f;hb=a8e1051d4c47f8c5b2c55b072f903fdc0469849e;hp=94ebf874af6c53dbb895d2422aeb3b24584b3164;hpb=d828147333a7d55f13a8c37a68d2f902749999a8;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/deleteArchivedFiles.php b/maintenance/deleteArchivedFiles.php index 94ebf874af..d010073b90 100644 --- a/maintenance/deleteArchivedFiles.php +++ b/maintenance/deleteArchivedFiles.php @@ -21,7 +21,6 @@ * * @file * @ingroup Maintenance - * @author Aaron Schulz */ require_once __DIR__ . '/Maintenance.php'; @@ -34,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php'; class DeleteArchivedFiles extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Deletes all archived images."; + $this->addDescription( 'Deletes all archived images.' ); $this->addOption( 'delete', 'Perform the deletion' ); $this->addOption( 'force', 'Force deletion of rows from filearchive' ); } @@ -54,7 +53,7 @@ class DeleteArchivedFiles extends Maintenance { $this->output( "Searching for and deleting archived files...\n" ); $res = $dbw->select( 'filearchive', - array( 'fa_id', 'fa_storage_group', 'fa_storage_key', 'fa_sha1' ), + [ 'fa_id', 'fa_storage_group', 'fa_storage_key', 'fa_sha1', 'fa_name' ], '', __METHOD__ ); @@ -67,9 +66,19 @@ class DeleteArchivedFiles extends Maintenance { continue; } + /** @var LocalFile $file */ + $file = $repo->newFile( $row->fa_name ); + try { + $file->lock(); + } catch ( LocalFileLockError $e ) { + $this->error( "Could not acquire lock on '{$row->fa_name}', skipping\n" ); + continue; + } + $group = $row->fa_storage_group; $id = $row->fa_id; - $path = $repo->getZonePath( 'deleted' ) . '/' . $repo->getDeletedHashPath( $key ) . $key; + $path = $repo->getZonePath( 'deleted' ) . + '/' . $repo->getDeletedHashPath( $key ) . $key; if ( isset( $row->fa_sha1 ) ) { $sha1 = $row->fa_sha1; } else { @@ -81,12 +90,12 @@ class DeleteArchivedFiles extends Maintenance { $inuse = $dbw->selectField( 'oldimage', '1', - array( + [ 'oi_sha1' => $sha1, $dbw->bitAnd( 'oi_deleted', File::DELETED_FILE ) => File::DELETED_FILE - ), + ], __METHOD__, - array( 'FOR UPDATE' ) + [ 'FOR UPDATE' ] ); $needForce = true; @@ -96,6 +105,7 @@ class DeleteArchivedFiles extends Maintenance { $this->output( "Notice - file '$key' is still in use\n" ); } elseif ( !$repo->quickPurge( $path ) ) { $this->output( "Unable to remove file $path, skipping\n" ); + $file->unlock(); continue; // don't delete even with --force } else { $needForce = false; @@ -105,12 +115,14 @@ class DeleteArchivedFiles extends Maintenance { if ( $this->hasOption( 'force' ) ) { $this->output( "Got --force, deleting DB entry\n" ); } else { + $file->unlock(); continue; } } $count++; - $dbw->delete( 'filearchive', array( 'fa_id' => $id ), __METHOD__ ); + $dbw->delete( 'filearchive', [ 'fa_id' => $id ], __METHOD__ ); + $file->unlock(); } $this->commitTransaction( $dbw, __METHOD__ ); @@ -118,5 +130,5 @@ class DeleteArchivedFiles extends Maintenance { } } -$maintClass = "DeleteArchivedFiles"; +$maintClass = DeleteArchivedFiles::class; require_once RUN_MAINTENANCE_IF_MAIN;