Legoktm has uploaded a new change for review. https://gerrit.wikimedia.org/r/200331
Change subject: Don't trigger MessageBlobStore during tests ...................................................................... Don't trigger MessageBlobStore during tests The test for OutputPage::makeResourceLoaderLink was triggering database queries through MessageBlobStore even though it doesn't use any messages. In bb03d1a8e08 I had made MessageBlobStore a singleton instead of static functions, however there's no need for it to be one since the class is stateless. Callers can just create a new MessageBlobStore instance and call functions upon it. Using getInstance() is now deprecated. ResourceLoader now has a setMessageBlobStore setter to allow overriding which MessageBlobStore instance will be used. OutputPageTest uses this to set a NullMessageBlobStore, which makes no database queries. Change-Id: Ica7436fb6f1ea59bd445b02527829ab0742c0842 --- M includes/MessageBlobStore.php M includes/cache/LocalisationCache.php M includes/cache/MessageCache.php M includes/installer/DatabaseUpdater.php M includes/resourceloader/ResourceLoader.php M tests/phpunit/includes/OutputPageTest.php 6 files changed, 48 insertions(+), 10 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/31/200331/1 diff --git a/includes/MessageBlobStore.php b/includes/MessageBlobStore.php index c384188..011cae6 100644 --- a/includes/MessageBlobStore.php +++ b/includes/MessageBlobStore.php @@ -36,15 +36,12 @@ * Get the singleton instance * * @since 1.24 + * @deprecated since 1.25 * @return MessageBlobStore */ public static function getInstance() { - static $instance = null; - if ( $instance === null ) { - $instance = new self; - } - - return $instance; + wfDeprecated( __METHOD__, '1.25' ); + return new self; } /** diff --git a/includes/cache/LocalisationCache.php b/includes/cache/LocalisationCache.php index e270f5f..dc5a2eb 100644 --- a/includes/cache/LocalisationCache.php +++ b/includes/cache/LocalisationCache.php @@ -1020,7 +1020,8 @@ # HACK: If using a null (i.e. disabled) storage backend, we # can't write to the MessageBlobStore either if ( $purgeBlobs && !$this->store instanceof LCStoreNull ) { - MessageBlobStore::getInstance()->clear(); + $blobStore = new MessageBlobStore(); + $blobStore->clear(); } } diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 04f5887..82919c7 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -562,7 +562,8 @@ // Update the message in the message blob store global $wgContLang; - MessageBlobStore::getInstance()->updateMessage( $wgContLang->lcfirst( $msg ) ); + $blobStore = new MessageBlobStore(); + $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) ); Hooks::run( 'MessageCacheReplace', array( $title, $text ) ); diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php index b676f45..12ef91a 100644 --- a/includes/installer/DatabaseUpdater.php +++ b/includes/installer/DatabaseUpdater.php @@ -932,7 +932,8 @@ if ( $wgLocalisationCacheConf['manualRecache'] ) { $this->rebuildLocalisationCache(); } - MessageBlobStore::getInstance()->clear(); + $blobStore = new MessageBlobStore(); + $blobStore->clear(); $this->output( "done.\n" ); } diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 5eab3cb..b9d1b2b 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -73,6 +73,11 @@ protected $errors = array(); /** + * @var MessageBlobStore + */ + protected $blobStore; + + /** * Load information stored in the database about modules. * * This method grabs modules dependencies from the database and updates modules @@ -250,6 +255,7 @@ $this->registerTestModules(); } + $this->setMessageBlobStore( new MessageBlobStore() ); } /** @@ -257,6 +263,14 @@ */ public function getConfig() { return $this->config; + } + + /** + * @param MessageBlobStore $blobStore + * @since 1.25 + */ + public function setMessageBlobStore( MessageBlobStore $blobStore ) { + $this->blobStore = $blobStore; } /** @@ -885,7 +899,7 @@ // Pre-fetch blobs if ( $context->shouldIncludeMessages() ) { try { - $blobs = MessageBlobStore::getInstance()->get( $this, $modules, $context->getLanguage() ); + $blobs = $this->blobStore->get( $this, $modules, $context->getLanguage() ); } catch ( Exception $e ) { MWExceptionHandler::logException( $e ); wfDebugLog( diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index 2526fcc..ee6a8cf 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -239,6 +239,7 @@ $ctx->setLanguage( 'en' ); $out = new OutputPage( $ctx ); $rl = $out->getResourceLoader(); + $rl->setMessageBlobStore( new NullMessageBlobStore() ); $rl->register( array( 'test.foo' => new ResourceLoaderTestModule( array( 'script' => 'mw.test.foo( { a: true } );', @@ -280,3 +281,26 @@ $this->assertEquals( $expectedHtml, $actualHtml ); } } + +/** + * MessageBlobStore that doesn't do anything + */ +class NullMessageBlobStore extends MessageBlobStore { + public function get ( ResourceLoader $resourceLoader, $modules, $lang ) { + return array(); + } + + public function insertMessageBlob ( $name, ResourceLoaderModule $module, $lang ) { + return false; + } + + public function updateModule ( $name, ResourceLoaderModule $module, $lang ) { + return; + } + + public function updateMessage ( $key ) { + } + public function clear() { + } +} + -- To view, visit https://gerrit.wikimedia.org/r/200331 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ica7436fb6f1ea59bd445b02527829ab0742c0842 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits