X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Ffilerepo%2FRepoGroup.php;h=804783521253236c1b088d77b726a6449ee47a46;hp=f3fed5772d84e90c224461e10a220b006ec894ca;hb=a3cd158d8433e41cbeb299f0e268dfef363b2afd;hpb=cccb3cfb73a0ec3e842bb3b88912e4ecfcaba0aa diff --git a/includes/filerepo/RepoGroup.php b/includes/filerepo/RepoGroup.php index f3fed5772d..8047835212 100644 --- a/includes/filerepo/RepoGroup.php +++ b/includes/filerepo/RepoGroup.php @@ -21,6 +21,8 @@ * @ingroup FileRepo */ +use MediaWiki\MediaWikiServices; + /** * Prioritized list of file repositories * @@ -33,6 +35,9 @@ class RepoGroup { /** @var FileRepo[] */ protected $foreignRepos; + /** @var WANObjectCache */ + protected $wanCache; + /** @var bool */ protected $reposInitialised = false; @@ -45,65 +50,60 @@ class RepoGroup { /** @var ProcessCacheLRU */ protected $cache; - /** @var RepoGroup */ - protected static $instance; - /** Maximum number of cache items */ const MAX_CACHE_SIZE = 500; /** - * Get a RepoGroup instance. At present only one instance of RepoGroup is - * needed in a MediaWiki invocation, this may change in the future. + * @deprecated since 1.34, use MediaWikiServices::getRepoGroup * @return RepoGroup */ static function singleton() { - if ( self::$instance ) { - return self::$instance; - } - global $wgLocalFileRepo, $wgForeignFileRepos; - self::$instance = new RepoGroup( $wgLocalFileRepo, $wgForeignFileRepos ); - - return self::$instance; + return MediaWikiServices::getInstance()->getRepoGroup(); } /** - * Destroy the singleton instance, so that a new one will be created next - * time singleton() is called. + * @deprecated since 1.34, use MediaWikiTestCase::overrideMwServices() or similar. This will + * cause bugs if you don't reset all other services that depend on this one at the same time. */ static function destroySingleton() { - self::$instance = null; + MediaWikiServices::getInstance()->resetServiceForTesting( 'RepoGroup' ); } /** - * Set the singleton instance to a given object - * Used by extensions which hook into the Repo chain. - * It's not enough to just create a superclass ... you have - * to get people to call into it even though all they know is RepoGroup::singleton() - * + * @deprecated since 1.34, use MediaWikiTestCase::setService, this can mess up state of other + * tests * @param RepoGroup $instance */ static function setSingleton( $instance ) { - self::$instance = $instance; + $services = MediaWikiServices::getInstance(); + $services->disableService( 'RepoGroup' ); + $services->redefineService( 'RepoGroup', + function () use ( $instance ) { + return $instance; + } + ); } /** - * Construct a group of file repositories. + * Construct a group of file repositories. Do not call this -- use + * MediaWikiServices::getRepoGroup. * * @param array $localInfo Associative array for local repo's info * @param array $foreignInfo Array of repository info arrays. * Each info array is an associative array with the 'class' member * giving the class name. The entire array is passed to the repository * constructor as the first parameter. + * @param WANObjectCache $wanCache */ - function __construct( $localInfo, $foreignInfo ) { + function __construct( $localInfo, $foreignInfo, $wanCache ) { $this->localInfo = $localInfo; $this->foreignInfo = $foreignInfo; $this->cache = new MapCacheLRU( self::MAX_CACHE_SIZE ); + $this->wanCache = $wanCache; } /** * Search repositories for an image. - * You can also use wfFindFile() to do this. * * @param Title|string $title Title object or string * @param array $options Associative array of options: @@ -164,7 +164,7 @@ class RepoGroup { } } - $image = $image ?: false; // type sanity + $image = $image instanceof File ? $image : false; // type sanity # Cache file existence or non-existence if ( $useCache && ( !$image || $image->isCacheable() ) ) { $this->cache->setField( $dbkey, $timeKey, $image ); @@ -317,7 +317,7 @@ class RepoGroup { /** * Get the repo instance with a given key. * @param string|int $index - * @return bool|LocalRepo + * @return bool|FileRepo */ function getRepo( $index ) { if ( !$this->reposInitialised ) { @@ -354,7 +354,10 @@ class RepoGroup { * @return LocalRepo */ function getLocalRepo() { - return $this->getRepo( 'local' ); + /** @var LocalRepo $repo */ + $repo = $this->getRepo( 'local' ); + + return $repo; } /** @@ -413,6 +416,8 @@ class RepoGroup { protected function newRepo( $info ) { $class = $info['class']; + $info['wanCache'] = $this->wanCache; + return new $class( $info ); }