Addshore has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/406131 )

Change subject: Introduce and use CommentStoreFactory
......................................................................

Introduce and use CommentStoreFactory

Change-Id: I3abb62a5cfb0dcd456da9f4eb35583476ae41cfb
---
M autoload.php
M includes/CommentStore.php
A includes/CommentStoreFactory.php
M includes/MediaWikiServices.php
M includes/ServiceWiring.php
M includes/Title.php
M includes/api/ApiQueryAllUsers.php
M includes/api/ApiQueryBlocks.php
M includes/api/ApiQueryDeletedrevs.php
M includes/api/ApiQueryFilearchive.php
M includes/api/ApiQueryLogEvents.php
M includes/api/ApiQueryProtectedTitles.php
M includes/api/ApiQueryRecentChanges.php
M includes/api/ApiQueryUserContributions.php
M includes/api/ApiQueryUsers.php
M includes/api/ApiQueryWatchlist.php
M includes/filerepo/file/LocalFile.php
M includes/page/WikiPage.php
M includes/watcheditem/WatchedItemQueryService.php
M maintenance/orphans.php
M maintenance/rebuildrecentchanges.php
A tests/phpunit/includes/CommentStoreFactoryTest.php
M tests/phpunit/includes/MediaWikiServicesTest.php
23 files changed, 102 insertions(+), 33 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/31/406131/1

diff --git a/autoload.php b/autoload.php
index 6fb2cc4..b7bf2f6 100644
--- a/autoload.php
+++ b/autoload.php
@@ -279,6 +279,7 @@
        'CommandLineInc' => __DIR__ . '/maintenance/commandLine.inc',
        'CommandLineInstaller' => __DIR__ . '/maintenance/install.php',
        'CommentStore' => __DIR__ . '/includes/CommentStore.php',
+       'CommentStoreFactory' => __DIR__ . '/includes/CommentStoreFactory.php',
        'CommentStoreComment' => __DIR__ . '/includes/CommentStoreComment.php',
        'CompareParserCache' => __DIR__ . '/maintenance/compareParserCache.php',
        'CompareParsers' => __DIR__ . '/maintenance/compareParsers.php',
diff --git a/includes/CommentStore.php b/includes/CommentStore.php
index 0d679d3..102cb05 100644
--- a/includes/CommentStore.php
+++ b/includes/CommentStore.php
@@ -20,6 +20,7 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
@@ -97,12 +98,10 @@
         * @param Language $lang Language to use for comment truncation. 
Defaults
         *  to $wgContLang.
         */
-       public function __construct( $key, Language $lang = null ) {
-               global $wgCommentTableSchemaMigrationStage, $wgContLang;
-
+       public function __construct( $key, Language $lang, $migrationStage ) {
                $this->key = $key;
-               $this->stage = $wgCommentTableSchemaMigrationStage;
-               $this->lang = $lang ?: $wgContLang;
+               $this->stage = $migrationStage;
+               $this->lang = $lang;
        }
 
        /**
@@ -112,7 +111,9 @@
         * @return CommentStore
         */
        public static function newKey( $key ) {
-               return new CommentStore( $key );
+               return MediaWikiServices::getInstance()
+                       ->getCommentStoreFactory()
+                       ->newForKey( $key );
        }
 
        /**
diff --git a/includes/CommentStoreFactory.php b/includes/CommentStoreFactory.php
new file mode 100644
index 0000000..9174f7d
--- /dev/null
+++ b/includes/CommentStoreFactory.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @since 1.31
+ */
+class CommentStoreFactory {
+
+       /** @var Language Language to use for comment truncation */
+       private $lang;
+
+       /** @var int One of the MIGRATION_* constants */
+       private $migrationStage;
+
+       /**
+        * @param Language $lang to use for comment truncation
+        * @param int $migrationStage One of the MIGRATION_* constants
+        */
+       public function __construct( $lang, $migrationStage ) {
+               $this->lang = $lang;
+               $this->migrationStage = $migrationStage;
+       }
+
+       /**
+        * @since 1.31
+        *
+        * @param string $key A key such as "rev_comment" identifying the 
comment
+        *  field being fetched.
+        * @return CommentStore
+        */
+       public function newForKey( $key ) {
+               return new CommentStore( $key, $this->lang, 
$this->migrationStage );
+       }
+
+}
diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php
index c283793..31b3c1c 100644
--- a/includes/MediaWikiServices.php
+++ b/includes/MediaWikiServices.php
@@ -1,6 +1,7 @@
 <?php
 namespace MediaWiki;
 
+use CommentStoreFactory;
 use Config;
 use ConfigFactory;
 use CryptHKDF;
@@ -761,6 +762,14 @@
                return $this->getService( 'HttpRequestFactory' );
        }
 
+       /**
+        * @since 1.31
+        * @return CommentStoreFactory
+        */
+       public function getCommentStoreFactory() {
+               return $this->getService( 'CommentStoreFactory' );
+       }
+
        
///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php
index a89619f..5b5535e 100644
--- a/includes/ServiceWiring.php
+++ b/includes/ServiceWiring.php
@@ -520,6 +520,14 @@
                return new \MediaWiki\Http\HttpRequestFactory();
        },
 
+       'CommentStoreFactory' => function ( MediaWikiServices $services ) {
+               global $wgContLang, $wgCommentTableSchemaMigrationStage;
+               return new CommentStoreFactory(
+                       $wgContLang,
+                       $wgCommentTableSchemaMigrationStage
+               );
+       }
+
        
///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter 
function
        // in the MediaWikiServices class. The convenience getter should just 
call
diff --git a/includes/Title.php b/includes/Title.php
index c4cf434..85fb675 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -2735,7 +2735,7 @@
 
                if ( $this->mTitleProtection === null ) {
                        $dbr = wfGetDB( DB_REPLICA );
-                       $commentStore = new CommentStore( 'pt_reason' );
+                       $commentStore = CommentStore::newKey( 'pt_reason' );
                        $commentQuery = $commentStore->getJoin();
                        $res = $dbr->select(
                                [ 'protected_titles' ] + 
$commentQuery['tables'],
diff --git a/includes/api/ApiQueryAllUsers.php 
b/includes/api/ApiQueryAllUsers.php
index d594ad4..55afd44 100644
--- a/includes/api/ApiQueryAllUsers.php
+++ b/includes/api/ApiQueryAllUsers.php
@@ -49,7 +49,7 @@
                $activeUserDays = $this->getConfig()->get( 'ActiveUserDays' );
 
                $db = $this->getDB();
-               $commentStore = new CommentStore( 'ipb_reason' );
+               $commentStore = CommentStore::newKey( 'ipb_reason' );
 
                $prop = $params['prop'];
                if ( !is_null( $prop ) ) {
diff --git a/includes/api/ApiQueryBlocks.php b/includes/api/ApiQueryBlocks.php
index 698c13c..b412b56 100644
--- a/includes/api/ApiQueryBlocks.php
+++ b/includes/api/ApiQueryBlocks.php
@@ -37,7 +37,7 @@
 
        public function execute() {
                $db = $this->getDB();
-               $commentStore = new CommentStore( 'ipb_reason' );
+               $commentStore = CommentStore::newKey( 'ipb_reason' );
                $params = $this->extractRequestParams();
                $this->requireMaxOneParameter( $params, 'users', 'ip' );
 
diff --git a/includes/api/ApiQueryDeletedrevs.php 
b/includes/api/ApiQueryDeletedrevs.php
index 5dd007b..85fea16 100644
--- a/includes/api/ApiQueryDeletedrevs.php
+++ b/includes/api/ApiQueryDeletedrevs.php
@@ -44,7 +44,7 @@
 
                $user = $this->getUser();
                $db = $this->getDB();
-               $commentStore = new CommentStore( 'ar_comment' );
+               $commentStore = CommentStore::newKey( 'ar_comment' );
                $params = $this->extractRequestParams( false );
                $prop = array_flip( $params['prop'] );
                $fld_parentid = isset( $prop['parentid'] );
diff --git a/includes/api/ApiQueryFilearchive.php 
b/includes/api/ApiQueryFilearchive.php
index 838fc2b..9d318d4 100644
--- a/includes/api/ApiQueryFilearchive.php
+++ b/includes/api/ApiQueryFilearchive.php
@@ -43,7 +43,7 @@
 
                $user = $this->getUser();
                $db = $this->getDB();
-               $commentStore = new CommentStore( 'fa_description' );
+               $commentStore = CommentStore::newKey( 'fa_description' );
 
                $params = $this->extractRequestParams();
 
diff --git a/includes/api/ApiQueryLogEvents.php 
b/includes/api/ApiQueryLogEvents.php
index 3066720..30246e9 100644
--- a/includes/api/ApiQueryLogEvents.php
+++ b/includes/api/ApiQueryLogEvents.php
@@ -45,7 +45,7 @@
        public function execute() {
                $params = $this->extractRequestParams();
                $db = $this->getDB();
-               $this->commentStore = new CommentStore( 'log_comment' );
+               $this->commentStore = CommentStore::newKey( 'log_comment' );
                $this->requireMaxOneParameter( $params, 'title', 'prefix', 
'namespace' );
 
                $prop = array_flip( $params['prop'] );
diff --git a/includes/api/ApiQueryProtectedTitles.php 
b/includes/api/ApiQueryProtectedTitles.php
index b69a299..5f2e56b 100644
--- a/includes/api/ApiQueryProtectedTitles.php
+++ b/includes/api/ApiQueryProtectedTitles.php
@@ -59,7 +59,7 @@
                $this->addFieldsIf( 'pt_create_perm', isset( $prop['level'] ) );
 
                if ( isset( $prop['comment'] ) || isset( $prop['parsedcomment'] 
) ) {
-                       $commentStore = new CommentStore( 'pt_reason' );
+                       $commentStore = CommentStore::newKey( 'pt_reason' );
                        $commentQuery = $commentStore->getJoin();
                        $this->addTables( $commentQuery['tables'] );
                        $this->addFields( $commentQuery['fields'] );
diff --git a/includes/api/ApiQueryRecentChanges.php 
b/includes/api/ApiQueryRecentChanges.php
index 63e0748..af2ae20 100644
--- a/includes/api/ApiQueryRecentChanges.php
+++ b/includes/api/ApiQueryRecentChanges.php
@@ -354,7 +354,7 @@
                $this->token = $params['token'];
 
                if ( $this->fld_comment || $this->fld_parsedcomment || 
$this->token ) {
-                       $this->commentStore = new CommentStore( 'rc_comment' );
+                       $this->commentStore = CommentStore::newKey( 
'rc_comment' );
                        $commentQuery = $this->commentStore->getJoin();
                        $this->addTables( $commentQuery['tables'] );
                        $this->addFields( $commentQuery['fields'] );
diff --git a/includes/api/ApiQueryUserContributions.php 
b/includes/api/ApiQueryUserContributions.php
index bb0f335..e5379fd 100644
--- a/includes/api/ApiQueryUserContributions.php
+++ b/includes/api/ApiQueryUserContributions.php
@@ -45,7 +45,7 @@
                // Parse some parameters
                $this->params = $this->extractRequestParams();
 
-               $this->commentStore = new CommentStore( 'rev_comment' );
+               $this->commentStore = CommentStore::newKey( 'rev_comment' );
 
                $prop = array_flip( $this->params['prop'] );
                $this->fld_ids = isset( $prop['ids'] );
diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php
index 8fc99bb..02ba6da 100644
--- a/includes/api/ApiQueryUsers.php
+++ b/includes/api/ApiQueryUsers.php
@@ -99,7 +99,7 @@
 
        public function execute() {
                $db = $this->getDB();
-               $commentStore = new CommentStore( 'ipb_reason' );
+               $commentStore = CommentStore::newKey( 'ipb_reason' );
 
                $params = $this->extractRequestParams();
                $this->requireMaxOneParameter( $params, 'userids', 'users' );
diff --git a/includes/api/ApiQueryWatchlist.php 
b/includes/api/ApiQueryWatchlist.php
index 710550a..10d3ffc 100644
--- a/includes/api/ApiQueryWatchlist.php
+++ b/includes/api/ApiQueryWatchlist.php
@@ -91,7 +91,7 @@
                        }
 
                        if ( $this->fld_comment || $this->fld_parsedcomment ) {
-                               $this->commentStore = new CommentStore( 
'rc_comment' );
+                               $this->commentStore = CommentStore::newKey( 
'rc_comment' );
                        }
                }
 
diff --git a/includes/filerepo/file/LocalFile.php 
b/includes/filerepo/file/LocalFile.php
index 4248f95..b7b56a3 100644
--- a/includes/filerepo/file/LocalFile.php
+++ b/includes/filerepo/file/LocalFile.php
@@ -1424,7 +1424,7 @@
                # Test to see if the row exists using INSERT IGNORE
                # This avoids race conditions by locking the row until the 
commit, and also
                # doesn't deadlock. SELECT FOR UPDATE causes a deadlock for 
every race condition.
-               $commentStore = new CommentStore( 'img_description' );
+               $commentStore = CommentStore::newKey( 'img_description' );
                list( $commentFields, $commentCallback ) =
                        $commentStore->insertWithTempTable( $dbw, $comment );
                $dbw->insert( 'image',
@@ -2403,10 +2403,10 @@
                $now = time();
                $dbw = $this->file->repo->getMasterDB();
 
-               $commentStoreImgDesc = new CommentStore( 'img_description' );
-               $commentStoreOiDesc = new CommentStore( 'oi_description' );
-               $commentStoreFaDesc = new CommentStore( 'fa_description' );
-               $commentStoreFaReason = new CommentStore( 'fa_deleted_reason' );
+               $commentStoreImgDesc = CommentStore::newKey( 'img_description' 
);
+               $commentStoreOiDesc = CommentStore::newKey( 'oi_description' );
+               $commentStoreFaDesc = CommentStore::newKey( 'fa_description' );
+               $commentStoreFaReason = CommentStore::newKey( 
'fa_deleted_reason' );
 
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $now ) );
                $encUserId = $dbw->addQuotes( $this->user->getId() );
@@ -2734,9 +2734,9 @@
 
                $dbw = $this->file->repo->getMasterDB();
 
-               $commentStoreImgDesc = new CommentStore( 'img_description' );
-               $commentStoreOiDesc = new CommentStore( 'oi_description' );
-               $commentStoreFaDesc = new CommentStore( 'fa_description' );
+               $commentStoreImgDesc = CommentStore::newKey( 'img_description' 
);
+               $commentStoreOiDesc = CommentStore::newKey( 'oi_description' );
+               $commentStoreFaDesc = CommentStore::newKey( 'fa_description' );
 
                $status = $this->file->repo->newGood();
 
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php
index d403ab5..2d1414b 100644
--- a/includes/page/WikiPage.php
+++ b/includes/page/WikiPage.php
@@ -2853,8 +2853,8 @@
                        $content = null;
                }
 
-               $revCommentStore = new CommentStore( 'rev_comment' );
-               $arCommentStore = new CommentStore( 'ar_comment' );
+               $revCommentStore = CommentStore::newKey( 'rev_comment' );
+               $arCommentStore = CommentStore::newKey( 'ar_comment' );
 
                $revQuery = Revision::getQueryInfo();
                $bitfield = false;
diff --git a/includes/watcheditem/WatchedItemQueryService.php 
b/includes/watcheditem/WatchedItemQueryService.php
index 3478b08..39965d5 100644
--- a/includes/watcheditem/WatchedItemQueryService.php
+++ b/includes/watcheditem/WatchedItemQueryService.php
@@ -85,7 +85,7 @@
 
        private function getCommentStore() {
                if ( !$this->commentStore ) {
-                       $this->commentStore = new CommentStore( 'rc_comment' );
+                       $this->commentStore = CommentStore::newKey( 
'rc_comment' );
                }
                return $this->commentStore;
        }
diff --git a/maintenance/orphans.php b/maintenance/orphans.php
index a1cf166..4e62a02 100644
--- a/maintenance/orphans.php
+++ b/maintenance/orphans.php
@@ -75,7 +75,7 @@
         */
        private function checkOrphans( $fix ) {
                $dbw = $this->getDB( DB_MASTER );
-               $commentStore = new CommentStore( 'rev_comment' );
+               $commentStore = CommentStore::newKey( 'rev_comment' );
 
                if ( $fix ) {
                        $this->lockTables( $dbw );
diff --git a/maintenance/rebuildrecentchanges.php 
b/maintenance/rebuildrecentchanges.php
index f26d8b3..9c5c1d1 100644
--- a/maintenance/rebuildrecentchanges.php
+++ b/maintenance/rebuildrecentchanges.php
@@ -80,8 +80,8 @@
         */
        private function rebuildRecentChangesTablePass1() {
                $dbw = $this->getDB( DB_MASTER );
-               $revCommentStore = new CommentStore( 'rev_comment' );
-               $rcCommentStore = new CommentStore( 'rc_comment' );
+               $revCommentStore = CommentStore::newKey( 'rev_comment' );
+               $rcCommentStore = CommentStore::newKey( 'rc_comment' );
 
                if ( $this->hasOption( 'from' ) && $this->hasOption( 'to' ) ) {
                        $this->cutoffFrom = wfTimestamp( TS_UNIX, 
$this->getOption( 'from' ) );
@@ -270,8 +270,8 @@
                global $wgLogTypes, $wgLogRestrictions;
 
                $dbw = $this->getDB( DB_MASTER );
-               $logCommentStore = new CommentStore( 'log_comment' );
-               $rcCommentStore = new CommentStore( 'rc_comment' );
+               $logCommentStore = CommentStore::newKey( 'log_comment' );
+               $rcCommentStore = CommentStore::newKey( 'rc_comment' );
 
                $this->output( "Loading from user, page, and logging 
tables...\n" );
 
diff --git a/tests/phpunit/includes/CommentStoreFactoryTest.php 
b/tests/phpunit/includes/CommentStoreFactoryTest.php
new file mode 100644
index 0000000..59751c4
--- /dev/null
+++ b/tests/phpunit/includes/CommentStoreFactoryTest.php
@@ -0,0 +1,15 @@
+<?php
+
+class CommentStoreFactoryTest extends MediaWikiTestCase {
+
+       public function testNewForKey() {
+               $factory = new CommentStoreFactory( Language::factory( 'en' ), 
MIGRATION_NEW );
+               $store = $factory->newForKey( 'brocolkey' );
+               $fields = $store->getFields();
+               $this->assertSame(
+                       [ 'brocolkey_id' => 'brocolkey_id' ],
+                       $fields
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php 
b/tests/phpunit/includes/MediaWikiServicesTest.php
index e3d5336..ee5ccb5 100644
--- a/tests/phpunit/includes/MediaWikiServicesTest.php
+++ b/tests/phpunit/includes/MediaWikiServicesTest.php
@@ -344,6 +344,7 @@
                        'RevisionStore' => [ 'RevisionStore', 
RevisionStore::class ],
                        'RevisionLookup' => [ 'RevisionLookup', 
RevisionLookup::class ],
                        'HttpRequestFactory' => [ 'HttpRequestFactory', 
HttpRequestFactory::class ],
+                       'CommentStoreFactory' => [ 'CommentStoreFactory', 
CommentStoreFactory::class ],
                ];
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/406131
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3abb62a5cfb0dcd456da9f4eb35583476ae41cfb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to