aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Schulz <aschulz@wikimedia.org>2013-06-12 10:46:37 -0700
committerGerrit Code Review <gerrit@wikimedia.org>2013-06-13 23:37:00 +0000
commit28483205c91a9110355a24c26058121dc1bfeb83 (patch)
tree8539315a535b74161e0533659d9832c2484a33e3
parent382f706a5be188b32c9006a7c98da3c56e4f4321 (diff)
downloadmediawikicore-28483205c91a9110355a24c26058121dc1bfeb83.tar.gz
mediawikicore-28483205c91a9110355a24c26058121dc1bfeb83.zip
Made purgeDeletedFiles.php delete files still in the public zone.
* This makes purges more useful since the file won't come back. * This only applies for files that are confirmed to already be in the deleted zone too. This is for sanity. Change-Id: I60316c1d9323347d09607e36a334fc5eb0b6a2e7
-rw-r--r--maintenance/purgeDeletedFiles.php34
1 files changed, 30 insertions, 4 deletions
diff --git a/maintenance/purgeDeletedFiles.php b/maintenance/purgeDeletedFiles.php
index 32b65692365d..86658c52d489 100644
--- a/maintenance/purgeDeletedFiles.php
+++ b/maintenance/purgeDeletedFiles.php
@@ -68,28 +68,54 @@ class PurgeDeletedFiles extends Maintenance {
$res = $db->select( 'logging', array( 'log_title', 'log_timestamp' ), $conds, __METHOD__ );
foreach ( $res as $row ) {
$file = $repo->newFile( Title::makeTitle( NS_FILE, $row->log_title ) );
-
+ // If there is an orphaned storage file still there...delete it
+ if ( !$file->exists() && $repo->fileExists( $file->getPath() ) ) {
+ $dpath = $this->getDeletedPath( $repo, $file );
+ if ( $repo->fileExists( $dpath ) ) { // sanity check to avoid data loss
+ $repo->getBackend()->delete( array( 'src' => $file->getPath() ) );
+ $this->output( "Deleted orphan file: {$file->getPath()}.\n" );
+ } else {
+ $this->error( "File was not deleted: {$file->getPath()}.\n" );
+ }
+ }
// Purge current version and any versions in oldimage table
$file->purgeCache();
$file->purgeHistory();
// Purge items from fileachive table (rows are likely here)
- $this->purgeFromArchiveTable( $file );
+ $this->purgeFromArchiveTable( $repo, $file );
$this->output( "Purged file {$row->log_title}; deleted on {$row->log_timestamp}.\n" );
}
}
- protected function purgeFromArchiveTable( LocalFile $file ) {
- $db = $file->getRepo()->getSlaveDB();
+ protected function purgeFromArchiveTable( LocalRepo $repo, LocalFile $file ) {
+ $db = $repo->getSlaveDB();
$res = $db->select( 'filearchive',
array( 'fa_archive_name' ),
array( 'fa_name' => $file->getName() ),
__METHOD__
);
foreach ( $res as $row ) {
+ $ofile = $repo->newFromArchiveName( $file->getTitle(), $row->fa_archive_name );
+ // If there is an orphaned storage file still there...delete it
+ if ( !$file->exists() && $repo->fileExists( $ofile->getPath() ) ) {
+ $dpath = $this->getDeletedPath( $repo, $ofile );
+ if ( $repo->fileExists( $dpath ) ) { // sanity check to avoid data loss
+ $repo->getBackend()->delete( array( 'src' => $ofile->getPath() ) );
+ $this->output( "Deleted orphan file: {$ofile->getPath()}.\n" );
+ } else {
+ $this->error( "File was not deleted: {$ofile->getPath()}.\n" );
+ }
+ }
$file->purgeOldThumbnails( $row->fa_archive_name );
}
}
+
+ protected function getDeletedPath( LocalRepo $repo, LocalFile $file ) {
+ $hash = $repo->getFileSha1( $file->getPath() );
+ $key = "{$hash}.{$file->getExtension()}";
+ return $repo->getDeletedHashPath( $key ) . $key;
+ }
}
$maintClass = "PurgeDeletedFiles";