$purgeList = [];
foreach ( $files as $file ) {
- # Check that the base file name is part of the thumb name
+ if ( $this->repo->supportsSha1URLs() ) {
+ $reference = $this->getSha1();
+ } else {
+ $reference = $this->getName();
+ }
+
+ # Check that the reference (filename or sha1) is part of the thumb name
# This is a basic sanity check to avoid erasing unrelated directories
- if ( strpos( $file, $this->getName() ) !== false
+ if ( strpos( $file, $reference ) !== false
|| strpos( $file, "-thumbnail" ) !== false // "short" thumb name
) {
$purgeList[] = "{$dir}/{$file}";
*/
public function doPurge() {
$this->loadFile();
+
if ( $this->mFile->exists() ) {
wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, 'imagelinks' ) );
- $this->mFile->purgeCache( [ 'forThumbRefresh' => true ] );
} else {
wfDebug( 'ImagePage::doPurge no image for '
. $this->mFile->getName() . "; limiting purge to cache only\n" );
- // even if the file supposedly doesn't exist, force any cached information
- // to be updated (in case the cached information is wrong)
- $this->mFile->purgeCache( [ 'forThumbRefresh' => true ] );
}
+
+ // even if the file supposedly doesn't exist, force any cached information
+ // to be updated (in case the cached information is wrong)
+
+ // Purge current version and its thumbnails
+ $this->mFile->purgeCache( [ 'forThumbRefresh' => true ] );
+
+ // Purge the old versions and their thumbnails
+ foreach ( $this->mFile->getHistory() as $oldFile ) {
+ $oldFile->purgeCache( [ 'forThumbRefresh' => true ] );
+ }
+
if ( $this->mRepo ) {
// Purge redirect cache
$this->mRepo->invalidateImageRedirect( $this->mTitle );
}
+
return parent::doPurge();
}