$this->output( "Searching for and deleting archived files...\n" );
$res = $dbw->select(
'filearchive',
- [ 'fa_id', 'fa_storage_group', 'fa_storage_key', 'fa_sha1' ],
+ [ 'fa_id', 'fa_storage_group', 'fa_storage_key', 'fa_sha1', 'fa_name' ],
'',
__METHOD__
);
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 {
$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;
if ( $this->hasOption( 'force' ) ) {
$this->output( "Got --force, deleting DB entry\n" );
} else {
+ $file->unlock();
continue;
}
}
$count++;
$dbw->delete( 'filearchive', [ 'fa_id' => $id ], __METHOD__ );
+ $file->unlock();
}
$this->commitTransaction( $dbw, __METHOD__ );