jenkins-bot has submitted this change and it was merged.

Change subject: Get all queues with QueueFactory::getQueue
......................................................................


Get all queues with QueueFactory::getQueue

Make the 'queue' key default work everywhere

Change-Id: I1c619da04c08cf2470b9f04231fbeed50b1489ce
---
M Core/Actions/IncomingMessage.php
M Core/DataStores/MultiQueueWriter.php
A Core/DataStores/QueueFactory.php
M Core/QueueConsumers/BaseQueueConsumer.php
M Maintenance/RequeueDelayedMessages.php
M PaymentProviders/Adyen/Actions/CaptureResponseAction.php
M PaymentProviders/Adyen/Actions/PaymentCaptureAction.php
M PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php
M PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php
M PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
M PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php
M PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
M PaymentProviders/Amazon/Actions/AddMessageToQueue.php
M PaymentProviders/PayPal/Job.php
M PaymentProviders/PayPal/Listener.php
M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
M SmashPig.yaml
M Tests/QueueConsumerTest.php
18 files changed, 76 insertions(+), 59 deletions(-)

Approvals:
  Awight: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Core/Actions/IncomingMessage.php b/Core/Actions/IncomingMessage.php
index 61adc23..bb2b790 100644
--- a/Core/Actions/IncomingMessage.php
+++ b/Core/Actions/IncomingMessage.php
@@ -1,6 +1,6 @@
 <?php namespace SmashPig\Core\Actions;
 
-use SmashPig\Core\Context;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\Core\Messages\ListenerMessage;
 
@@ -10,7 +10,7 @@
                $destinationQueue = $msg->getDestinationQueue();
 
                if ( $destinationQueue ) {
-                       $queue = Context::get()->getConfiguration()->object( 
"data-store/{$destinationQueue}" );
+                       $queue = QueueFactory::getQueue( $destinationQueue );
                        $queueMsg = $msg->normalizeForQueue();
 
                        $queue->push( $queueMsg );
diff --git a/Core/DataStores/MultiQueueWriter.php 
b/Core/DataStores/MultiQueueWriter.php
index af90ef0..1cae76d 100644
--- a/Core/DataStores/MultiQueueWriter.php
+++ b/Core/DataStores/MultiQueueWriter.php
@@ -1,7 +1,6 @@
 <?php namespace SmashPig\Core\DataStores;
 
 use PHPQueue\Interfaces\FifoQueueStore;
-use SmashPig\Core\Configuration;
 use SmashPig\Core\ConfigurationException;
 
 /**
@@ -17,10 +16,8 @@
         * @param array $backends list of config keys under data-store
         */
        public function __construct( $backends ) {
-               $config = Configuration::getDefaultConfig();
                foreach ( $backends as $configKey ) {
-                       $path = 'data-store/' . $configKey;
-                       $this->queues[] = $config->object( $path );
+                       $this->queues[] = QueueFactory::getQueue( $configKey );
                }
        }
 
diff --git a/Core/DataStores/QueueFactory.php b/Core/DataStores/QueueFactory.php
new file mode 100644
index 0000000..b1d9899
--- /dev/null
+++ b/Core/DataStores/QueueFactory.php
@@ -0,0 +1,41 @@
+<?php
+namespace SmashPig\Core\DataStores;
+
+use SmashPig\Core\Context;
+
+class QueueFactory {
+
+       /**
+        * Retrieves an instance of a queue object described in configuration,
+        * setting the 'queue' constructor option to $queueName if missing.
+        *
+        * @param string $queueName The subkey under data-store
+        * @return mixed
+        */
+       public static function getQueue( $queueName ) {
+               $config = Context::get()->getConfiguration();
+               $key = "data-store/$queueName";
+
+               // Examine the config node for a queue name
+               $node = $config->val( $key, true );
+               if (
+                       empty( $node['constructor-parameters'] ) ||
+                       empty( $node['constructor-parameters'][0]['queue'] )
+               ) {
+                       $nameParam = array(
+                               'data-store' => array(
+                                       $queueName => array(
+                                               'constructor-parameters' => 
array(
+                                                       array(
+                                                               'queue' => 
$queueName
+                                                       )
+                                               )
+                                       )
+                               )
+                       );
+                       $config->override( $nameParam );
+               }
+
+               return $config->object( $key );
+       }
+}
diff --git a/Core/QueueConsumers/BaseQueueConsumer.php 
b/Core/QueueConsumers/BaseQueueConsumer.php
index f13a588..352896d 100644
--- a/Core/QueueConsumers/BaseQueueConsumer.php
+++ b/Core/QueueConsumers/BaseQueueConsumer.php
@@ -7,6 +7,7 @@
 
 use SmashPig\Core\Context;
 use SmashPig\Core\DataStores\DamagedDatabase;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\Logger;
 
 /**
@@ -70,7 +71,7 @@
                $this->timeLimit = intval( $timeLimit );
                $this->messageLimit = intval( $messageLimit );
 
-               $this->backend = self::getQueue( $queueName );
+               $this->backend = QueueFactory::getQueue( $queueName );
 
                if ( !$this->backend instanceof AtomicReadBuffer ) {
                        throw new InvalidArgumentException(
@@ -151,19 +152,4 @@
                );
        }
 
-       public static function getQueue( $queueName ) {
-               $config = Context::get()->getConfiguration();
-               $key = "data-store/$queueName";
-
-               // Get a reference to the config node so we can mess with it
-               $node =& $config->val( $key, true );
-               if (
-                       empty( $node['constructor-parameters'] ) ||
-                       empty( $node['constructor-parameters'][0]['queue'] )
-               ) {
-                       $node['constructor-parameters'][0]['queue'] = 
$queueName;
-               }
-
-               return $config->object( $key, true );
-       }
 }
diff --git a/Maintenance/RequeueDelayedMessages.php 
b/Maintenance/RequeueDelayedMessages.php
index be16a74..223c395 100644
--- a/Maintenance/RequeueDelayedMessages.php
+++ b/Maintenance/RequeueDelayedMessages.php
@@ -3,7 +3,7 @@
 
 require ( 'MaintenanceBase.php' );
 
-use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\Core\DataStores\DamagedDatabase;
 
@@ -37,12 +37,11 @@
                        $this->getOption( 'max-messages' )
                );
                $stats = array();
-               $config = Configuration::getDefaultConfig();
 
                foreach( $messages as $message ) {
                        $queueName = $message['original_queue'];
                        // FIXME: getting it by alias, this will be annoying 
cos -new
-                       $queue = $config->object( "data-store/$queueName", true 
);
+                       $queue = QueueFactory::getQueue( $queueName );
                        unset( $message['original_queue'] );
                        $queue->push( $message );
                        $this->damagedDatabase->deleteMessage( $message );
diff --git a/PaymentProviders/Adyen/Actions/CaptureResponseAction.php 
b/PaymentProviders/Adyen/Actions/CaptureResponseAction.php
index 2fbc024..ffc9f3c 100644
--- a/PaymentProviders/Adyen/Actions/CaptureResponseAction.php
+++ b/PaymentProviders/Adyen/Actions/CaptureResponseAction.php
@@ -1,7 +1,7 @@
 <?php namespace SmashPig\PaymentProviders\Adyen\Actions;
 
 use SmashPig\Core\Actions\IListenerMessageAction;
-use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\TaggedLogger;
 use SmashPig\Core\Messages\ListenerMessage;
 use SmashPig\PaymentProviders\Adyen\ExpatriatedMessages\Capture;
@@ -22,7 +22,7 @@
                                        "Adding record capture job for 
{$msg->currency} {$msg->amount} with id {$msg->correlationId} and psp reference 
{$msg->pspReference}."
                                );
                                $recordJob = RecordCaptureJob::factory( $msg );
-                               $jobQueue = 
Configuration::getDefaultConfig()->object( 'data-store/jobs' );
+                               $jobQueue = QueueFactory::getQueue( 'jobs' );
                                $jobQueue->addObject( $recordJob );
                        } else {
                                $tl->warning(
diff --git a/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php 
b/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php
index 2281adf..943575e 100644
--- a/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php
+++ b/PaymentProviders/Adyen/Actions/PaymentCaptureAction.php
@@ -1,6 +1,6 @@
 <?php namespace SmashPig\PaymentProviders\Adyen\Actions;
 
-use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Jobs\DeletePendingJob;
 use SmashPig\Core\Logging\TaggedLogger;
 use SmashPig\Core\Messages\ListenerMessage;
@@ -18,7 +18,7 @@
                $tl = new TaggedLogger( 'PaymentCaptureAction' );
 
                if ( $msg instanceof Authorisation ) {
-                       $jobQueueObj = 
Configuration::getDefaultConfig()->object( 'data-store/jobs' );
+                       $jobQueueObj = QueueFactory::getQueue( 'jobs' );
                        if ( $msg->success ) {
                                // Here we need to capture the payment, the job 
runner will collect the
                                // orphan message
diff --git a/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php 
b/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php
index 4c4f2d6..b0ac3d0 100644
--- a/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php
+++ b/PaymentProviders/Adyen/ExpatriatedMessages/ReportAvailable.php
@@ -1,6 +1,6 @@
 <?php namespace SmashPig\PaymentProviders\Adyen\ExpatriatedMessages;
 
-use SmashPig\Core\Context;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\PaymentProviders\Adyen\Jobs\DownloadReportJob;
 
@@ -20,7 +20,7 @@
                        $this->reason
                );
 
-               $jobQueueObj = Context::get()->getConfiguration()->object( 
'data-store/jobs' );
+               $jobQueueObj = QueueFactory::getQueue( 'jobs' );
                if ( strpos( $this->pspReference, 'settlement_detail_report' ) 
=== 0 ) {
                        $jobQueueObj->addObject(
                                DownloadReportJob::factory(
diff --git a/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php 
b/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php
index fb39f08..63f2210 100644
--- a/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php
+++ b/PaymentProviders/Adyen/Jobs/ProcessCaptureRequestJob.php
@@ -2,6 +2,7 @@
 
 use SmashPig\Core\Configuration;
 use SmashPig\Core\DataStores\PendingDatabase;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Jobs\RunnableJob;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\Core\Logging\TaggedLogger;
@@ -193,8 +194,7 @@
                        $dbMessage, $riskScore, $scoreBreakdown, $action
                );
                $this->logger->debug( "Sending antifraud message with risk 
score $riskScore and action $action." );
-               Configuration::getDefaultConfig()
-                       ->object( 'data-store/payments-antifraud' )
+               QueueFactory::getQueue( 'payments-antifraud' )
                        ->push( $antifraudMessage );
        }
 
diff --git a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php 
b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
index 757ec23..f3c246d 100644
--- a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
+++ b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
@@ -2,6 +2,7 @@
 
 use SmashPig\Core\Configuration;
 use SmashPig\Core\DataStores\PendingDatabase;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Jobs\RunnableJob;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\CrmLink\Messages\DonationInterfaceMessage;
@@ -56,7 +57,7 @@
                        // Add the gateway transaction ID and send it to the 
completed queue
                        $dbMessage['gateway_txn_id'] = $this->originalReference;
                        $queueMessage = DonationInterfaceMessage::fromValues( 
$dbMessage );
-                       $config->object( 'data-store/verified' )->push( 
$queueMessage );
+                       QueueFactory::getQueue( 'verified' )->push( 
$queueMessage );
 
                        // Remove it from the pending database
                        $logger->debug( 'Removing donor details message from 
pending database' );
diff --git a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php 
b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php
index efcabbc..96af845 100644
--- a/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php
+++ b/PaymentProviders/Adyen/Tests/phpunit/CaptureJobTest.php
@@ -5,7 +5,7 @@
 use SmashPig\Core\Context;
 use SmashPig\Core\DataStores\KeyedOpaqueStorableObject;
 use SmashPig\Core\DataStores\PendingDatabase;
-use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\PaymentProviders\Adyen\Jobs\ProcessCaptureRequestJob;
 use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration;
 use SmashPig\Tests\BaseSmashPigUnitTestCase;
@@ -38,7 +38,7 @@
                        file_get_contents( __DIR__ . '/../Data/pending.json' ) 
, true
                );
                $this->pendingDatabase->storeMessage( $this->pendingMessage );
-               $this->antifraudQueue = BaseQueueConsumer::getQueue( 
'payments-antifraud' );
+               $this->antifraudQueue = QueueFactory::getQueue( 
'payments-antifraud' );
        }
 
        public function tearDown() {
diff --git a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php 
b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
index ce3edf9..8a61e15 100644
--- a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
+++ b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
@@ -4,7 +4,7 @@
 use SmashPig\Core\Context;
 use SmashPig\Core\DataStores\KeyedOpaqueStorableObject;
 use SmashPig\Core\DataStores\PendingDatabase;
-use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\PaymentProviders\Adyen\Jobs\RecordCaptureJob;
 use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration;
 use SmashPig\Tests\BaseSmashPigUnitTestCase;
@@ -42,7 +42,7 @@
        }
 
        public function testRecordCapture() {
-               $verifiedQueue = BaseQueueConsumer::getQueue( 'verified' );
+               $verifiedQueue = QueueFactory::getQueue( 'verified' );
                $verifiedQueue->createTable( 'verified' );
 
                $capture = KeyedOpaqueStorableObject::fromJsonProxy(
diff --git a/PaymentProviders/Amazon/Actions/AddMessageToQueue.php 
b/PaymentProviders/Amazon/Actions/AddMessageToQueue.php
index 6d5f0f2..05e909e 100644
--- a/PaymentProviders/Amazon/Actions/AddMessageToQueue.php
+++ b/PaymentProviders/Amazon/Actions/AddMessageToQueue.php
@@ -1,7 +1,7 @@
 <?php namespace SmashPig\PaymentProviders\Amazon\Actions;
 
 use SmashPig\Core\Actions\IListenerMessageAction;
-use SmashPig\Core\Context;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Logging\Logger;
 use SmashPig\Core\Messages\ListenerMessage;
 
@@ -11,7 +11,7 @@
                $destinationQueue = $msg->getDestinationQueue();
 
                if ( $destinationQueue ) {
-                       $queue = Context::get()->getConfiguration()->object( 
"data-store/{$destinationQueue}" );
+                       $queue = QueueFactory::getQueue( $destinationQueue );
                        $queueMsg = $msg->normalizeForQueue();
 
                        $queue->push( $queueMsg );
diff --git a/PaymentProviders/PayPal/Job.php b/PaymentProviders/PayPal/Job.php
index 43e5abb..d5a364b 100644
--- a/PaymentProviders/PayPal/Job.php
+++ b/PaymentProviders/PayPal/Job.php
@@ -1,6 +1,7 @@
 <?php namespace SmashPig\PaymentProviders\PayPal;
 
 use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Jobs\RunnableJob;
 
 class Job extends RunnableJob {
@@ -71,7 +72,7 @@
 
                // Save to appropriate queue.
 
-               $this->config->object( 'data-store/' . $msg_type )
+               QueueFactory::getQueue( $msg_type )
                        ->push( $new_msg );
 
                // TODO It would be nice if push() returned something useful so 
we
diff --git a/PaymentProviders/PayPal/Listener.php 
b/PaymentProviders/PayPal/Listener.php
index be75468..9c62d5a 100644
--- a/PaymentProviders/PayPal/Listener.php
+++ b/PaymentProviders/PayPal/Listener.php
@@ -1,6 +1,6 @@
 <?php namespace SmashPig\PaymentProviders\PayPal;
 
-use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\Core\Http\IHttpActionHandler;
 use SmashPig\Core\Http\Response;
 use SmashPig\Core\Http\Request;
@@ -8,8 +8,6 @@
 class Listener implements IHttpActionHandler {
 
        public function execute( Request $request, Response $response ) {
-               $this->config = Configuration::getDefaultConfig();
-
                $requestValues = $request->getValues();
 
                // Don't store blank messages.
@@ -21,7 +19,7 @@
                $job = new Job;
                $job->payload = $requestValues;
                $job->{'php-message-class'} = 
'SmashPig\PaymentProviders\PayPal\Job';
-               $this->config->object( 'data-store/jobs-paypal' )->push( $job );
+               QueueFactory::getQueue( 'jobs-paypal' )->push( $job );
        }
 
 }
diff --git 
a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php 
b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
index 2718fdb..952d116 100644
--- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
+++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
@@ -3,10 +3,8 @@
 
 use SmashPig\Core\Configuration;
 use SmashPig\Core\Context;
-use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
+use SmashPig\Core\DataStores\QueueFactory;
 use SmashPig\PaymentProviders\PayPal\Listener;
-use SmashPig\PaymentProviders\PayPal\Job;
-use SmashPig\PaymentProviders\PayPal\Tests\PayPalTestConfiguration;
 use SmashPig\Tests\BaseSmashPigUnitTestCase;
 use SmashPig\Core\Http\Response;
 use SmashPig\Core\Http\Request;
@@ -37,7 +35,7 @@
                $this->config = PayPalTestConfiguration::get();
 
                // php-queue\PDO complains about pop() from non-existent table
-               $this->config->object( 'data-store/jobs-paypal' )
+               QueueFactory::getQueue( 'jobs-paypal' )
                        ->createTable( 'jobs-paypal' );
 
                Context::initWithLogger( $this->config );
@@ -61,7 +59,7 @@
 
                        $this->capture( $msg );
 
-                       $jobQueue = $this->config->object( 
'data-store/jobs-paypal' );
+                       $jobQueue = QueueFactory::getQueue( 'jobs-paypal' );
                        $jobMessage = $jobQueue->pop();
 
                        $this->assertEquals( $jobMessage['php-message-class'],
@@ -74,7 +72,7 @@
 
        public function testBlankMessage() {
                $this->capture( array() );
-               $jobQueue = $this->config->object( 'data-store/jobs-paypal' );
+               $jobQueue = QueueFactory::getQueue( 'jobs-paypal' );
                $this->assertNull( $jobQueue->pop() );
        }
 
@@ -82,7 +80,7 @@
                foreach ( self::$messages as $type => $msg ) {
                        $this->capture( $msg );
 
-                       $jobQueue = $this->config->object( 
'data-store/jobs-paypal' );
+                       $jobQueue = QueueFactory::getQueue( 'jobs-paypal' );
                        $jobMessage = $jobQueue->pop();
 
                        $job = KeyedOpaqueStorableObject::fromJsonProxy(
@@ -92,8 +90,7 @@
 
                        $job->execute();
 
-                       $queue = $this->config->object( 'data-store/' . $type );
-                       $queue->createTable( $type );
+                       $queue = QueueFactory::getQueue( $type );
                        $message = $queue->pop();
 
                        $this->assertNotEmpty( $message );
diff --git a/SmashPig.yaml b/SmashPig.yaml
index f078a36..fb65a57 100644
--- a/SmashPig.yaml
+++ b/SmashPig.yaml
@@ -97,9 +97,6 @@
             constructor-parameters:
                 -
                     <<: *REDIS
-                    # FIXME: This queue thing is introspected at times, and at
-                    # others not.  Make it consistent (and invisible).
-                    queue: jobs-paypal
 
         verified:
             class: SmashPig\Core\DataStores\MultiQueueWriter
diff --git a/Tests/QueueConsumerTest.php b/Tests/QueueConsumerTest.php
index 4abea8a..86ec72f 100644
--- a/Tests/QueueConsumerTest.php
+++ b/Tests/QueueConsumerTest.php
@@ -7,7 +7,7 @@
 use PHPQueue\Interfaces\FifoQueueStore;
 use SmashPig\Core\Context;
 use SmashPig\Core\DataStores\DamagedDatabase;
-use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
+use SmashPig\Core\DataStores\QueueFactory;
 
 class QueueConsumerTest extends BaseSmashPigUnitTestCase {
 
@@ -23,7 +23,7 @@
        public function setUp() {
                parent::setUp();
                Context::initWithLogger( QueueTestConfiguration::instance() );
-               $this->queue = BaseQueueConsumer::getQueue( 'test' );
+               $this->queue = QueueFactory::getQueue( 'test' );
                $this->queue->createTable( 'test' );
                $damagedDb = DamagedDatabase::get();
                $damagedDb->createTable();

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I1c619da04c08cf2470b9f04231fbeed50b1489ce
Gerrit-PatchSet: 4
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <eeggles...@wikimedia.org>
Gerrit-Reviewer: Awight <awi...@wikimedia.org>
Gerrit-Reviewer: Cdentinger <cdentin...@wikimedia.org>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to