Thiemo Mättig (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/361422 )

Change subject: Fix and add missing type hints and imports
......................................................................

Fix and add missing type hints and imports

This patch mostly focuses on classes that got moved in MediaWiki core.

This also adds a few strict type hints where it makes sense.

Change-Id: I528ce0256998ce2cef6ba274f8b973e50324a0e4
---
M EducationProgram.hooks.php
M includes/ArticleStore.php
M includes/Events/EditEventCreator.php
M includes/Events/Event.php
M includes/Events/EventStore.php
M includes/ORMResult.php
M includes/Store/CourseStore.php
M includes/UPCUserCourseFinder.php
M includes/UserMergeArticleReviewersJob.php
M includes/actions/CompareAction.php
M includes/api/ApiListStudents.php
M includes/pages/EducationPage.php
M includes/rows/ORMRow.php
M includes/specials/SpecialMyCourses.php
M includes/tables/IORMTable.php
M includes/tables/ORMTable.php
M maintenance/importWEPFromDB.php
M tests/phpunit/ArticleAdderTest.php
M tests/phpunit/EPArticleTest.php
M tests/phpunit/db/ORMTableTest.php
20 files changed, 79 insertions(+), 71 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/EducationProgram 
refs/changes/22/361422/1

diff --git a/EducationProgram.hooks.php b/EducationProgram.hooks.php
index 47103c7..10300df 100755
--- a/EducationProgram.hooks.php
+++ b/EducationProgram.hooks.php
@@ -4,9 +4,8 @@
 
 use DatabaseUpdater;
 use EchoEvent;
-use RecursiveDirectoryIterator;
-use RecursiveIteratorIterator;
-use SplFileInfo;
+use EducationProgram\Events\EditEventCreator;
+use EducationProgram\Events\EventStore;
 use Title;
 use User;
 use SkinTemplate;
@@ -474,11 +473,11 @@
 
                        // TODO: properly inject dependencies
                        $courseFinder = new UPCUserCourseFinder( $dbw );
-                       $eventCreator = new 
\EducationProgram\Events\EditEventCreator( $dbw, $courseFinder );
+                       $eventCreator = new EditEventCreator( $dbw, 
$courseFinder );
 
                        $events = $eventCreator->getEventsForEdit( $article, 
$rev, $user );
                        if ( $events ) {
-                               $eventStore = new 
\EducationProgram\Events\EventStore( 'ep_events' );
+                               $eventStore = new EventStore( 'ep_events' );
 
                                $dbw->startAtomic( __METHOD__ );
                                foreach ( $events as $event ) {
diff --git a/includes/ArticleStore.php b/includes/ArticleStore.php
index b579acd..4d0c526 100644
--- a/includes/ArticleStore.php
+++ b/includes/ArticleStore.php
@@ -2,8 +2,8 @@
 
 namespace EducationProgram;
 
-use DatabaseBase;
 use InvalidArgumentException;
+use Wikimedia\Rdbms\Database;
 
 /**
  * Store for EPArticle objects.
@@ -84,7 +84,7 @@
         *
         * @since 0.3
         *
-        * @return DatabaseBase
+        * @return Database
         */
        protected function getReadConnection() {
                return wfGetDB( $this->readConnectionId );
@@ -96,7 +96,7 @@
         *
         * @since 0.3
         *
-        * @return DatabaseBase
+        * @return Database
         */
        protected function getWriteConnection() {
                return wfGetDB( DB_MASTER );
diff --git a/includes/Events/EditEventCreator.php 
b/includes/Events/EditEventCreator.php
index fa03e85..1ecc8f0 100644
--- a/includes/Events/EditEventCreator.php
+++ b/includes/Events/EditEventCreator.php
@@ -8,11 +8,11 @@
 use Revision;
 use User;
 use Page;
-use DatabaseBase;
 use MWNamespace;
 use Diff;
 use DiffOp;
 use ContentHandler;
+use Wikimedia\Rdbms\Database;
 
 /**
  * Class that generates edit based events by handling new edits.
@@ -48,7 +48,7 @@
        /**
         * @since 0.3
         *
-        * @var DatabaseBase
+        * @var Database
         */
        private $db;
 
@@ -62,10 +62,10 @@
        /**
         * @since 0.3
         *
-        * @param DatabaseBase $db
+        * @param Database $db
         * @param UserCourseFinder $userCourseFinder
         */
-       public function __construct( DatabaseBase $db, UserCourseFinder 
$userCourseFinder ) {
+       public function __construct( Database $db, UserCourseFinder 
$userCourseFinder ) {
                $this->db = $db;
                $this->userCourseFinder = $userCourseFinder;
        }
diff --git a/includes/Events/Event.php b/includes/Events/Event.php
index 8ac414b..78c3af0 100644
--- a/includes/Events/Event.php
+++ b/includes/Events/Event.php
@@ -2,8 +2,6 @@
 
 namespace EducationProgram\Events;
 
-use User;
-
 /**
  * Class representing a single Education Program event.
  *
diff --git a/includes/Events/EventStore.php b/includes/Events/EventStore.php
index e5eb075..b6600d8 100644
--- a/includes/Events/EventStore.php
+++ b/includes/Events/EventStore.php
@@ -2,15 +2,15 @@
 
 namespace EducationProgram\Events;
 
-use DatabaseBase;
 use InvalidArgumentException;
+use Wikimedia\Rdbms\Database;
 
 /**
  * Service via which EducationProgram events can be saved and queried.
  *
  * Side note:
  * This MySQL implementation of the interface pulls in some global
- * DatabaseBase object. Injecting a connection provider would be better,
+ * Database object. Injecting a connection provider would be better,
  * though sadly enough we do not have such an interface yet.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -66,7 +66,7 @@
        /**
         * @since 0.3
         *
-        * @return DatabaseBase
+        * @return Database
         */
        private function getReadConnection() {
                return wfGetDB( $this->readConnectionId );
@@ -75,7 +75,7 @@
        /**
         * @since 0.3
         *
-        * @return DatabaseBase
+        * @return Database
         */
        private function getWriteConnection() {
                return wfGetDB( DB_MASTER );
diff --git a/includes/ORMResult.php b/includes/ORMResult.php
index ca1d9ab..067d4aa 100644
--- a/includes/ORMResult.php
+++ b/includes/ORMResult.php
@@ -2,6 +2,8 @@
 
 namespace EducationProgram;
 
+use Wikimedia\Rdbms\ResultWrapper;
+
 /**
  * ORMIterator that takes a ResultWrapper object returned from
  * a select operation returning IORMRow objects (ie IORMTable::select).
@@ -35,7 +37,7 @@
 class ORMResult implements ORMIterator {
 
        /**
-        * @var \ResultWrapper
+        * @var ResultWrapper
         */
        protected $res;
 
@@ -56,9 +58,9 @@
 
        /**
         * @param IORMTable $table
-        * @param \ResultWrapper $res
+        * @param ResultWrapper $res
         */
-       public function __construct( IORMTable $table, \ResultWrapper $res ) {
+       public function __construct( IORMTable $table, ResultWrapper $res ) {
                $this->table = $table;
                $this->res = $res;
                $this->key = 0;
diff --git a/includes/Store/CourseStore.php b/includes/Store/CourseStore.php
index 27218ce..4e8d236 100644
--- a/includes/Store/CourseStore.php
+++ b/includes/Store/CourseStore.php
@@ -2,11 +2,11 @@
 
 namespace EducationProgram\Store;
 
-use DatabaseBase;
 use EducationProgram\Course;
 use EducationProgram\CourseNotFoundException;
 use EducationProgram\CourseTitleNotFoundException;
 use EducationProgram\Courses;
+use Wikimedia\Rdbms\Database;
 
 /**
  * This program is free software; you can redistribute it and/or modify
@@ -40,11 +40,11 @@
        private $tableName;
 
        /**
-        * @var DatabaseBase
+        * @var Database
         */
        private $readDatabase;
 
-       public function __construct( $tableName, DatabaseBase $readDatabase ) {
+       public function __construct( $tableName, Database $readDatabase ) {
                $this->readDatabase = $readDatabase;
                $this->tableName = $tableName;
        }
diff --git a/includes/UPCUserCourseFinder.php b/includes/UPCUserCourseFinder.php
index fe79a99..f5e0cf8 100644
--- a/includes/UPCUserCourseFinder.php
+++ b/includes/UPCUserCourseFinder.php
@@ -2,7 +2,7 @@
 
 namespace EducationProgram;
 
-use DatabaseBase;
+use Wikimedia\Rdbms\Database;
 
 /**
  * Implementation of the UserCourseFinder interface that works by doing
@@ -39,16 +39,16 @@
        /**
         * @since 0.3
         *
-        * @var DatabaseBase
+        * @var Database
         */
        private $db;
 
        /**
         * @since 0.3
         *
-        * @param DatabaseBase $db
+        * @param Database $db
         */
-       public function __construct( DatabaseBase $db ) {
+       public function __construct( Database $db ) {
                $this->db = $db;
        }
 
diff --git a/includes/UserMergeArticleReviewersJob.php 
b/includes/UserMergeArticleReviewersJob.php
index b69d5dd..2befda6 100644
--- a/includes/UserMergeArticleReviewersJob.php
+++ b/includes/UserMergeArticleReviewersJob.php
@@ -3,6 +3,7 @@
 namespace EducationProgram;
 
 use Job;
+use Title;
 
 /**
  * Job class for merging users in the article_reviewers column of the
@@ -36,7 +37,7 @@
        /**
         * @see Job::__construct() for info on the parameters passed through.
         */
-       public function __construct( $title, $params ) {
+       public function __construct( Title $title, $params ) {
                parent::__construct(
                        'educationProgramUserMergeArticleReviewers',
                        $title,
diff --git a/includes/actions/CompareAction.php 
b/includes/actions/CompareAction.php
index 626bf3b..465f59d 100644
--- a/includes/actions/CompareAction.php
+++ b/includes/actions/CompareAction.php
@@ -3,8 +3,6 @@
 namespace EducationProgram;
 
 use Linker;
-use Html;
-use Xml;
 
 /**
  * Action for comparing two revisions of a PageObject.
diff --git a/includes/api/ApiListStudents.php b/includes/api/ApiListStudents.php
index 5c71b3d..6c3b27e 100644
--- a/includes/api/ApiListStudents.php
+++ b/includes/api/ApiListStudents.php
@@ -3,6 +3,7 @@
 namespace EducationProgram;
 
 use ApiBase;
+use ApiResult;
 use User;
 
 /**
@@ -280,8 +281,8 @@
         * @param int $courseIndex
         */
        protected function outputListOfNonStudentParticipantsProperties(
-               $course,
-               $results,
+               Course $course,
+               ApiResult $results,
                $courseIndex,
                $courseRole
        ) {
@@ -505,9 +506,9 @@
         */
        protected function outputCourseProperties(
                $courseId,
-               $course,
+               Course $course,
                $courseIndex,
-               $results
+               ApiResult $results
        ) {
                // Use an unambiguous name for the course that
                // includes the institution, title, term and ID.
diff --git a/includes/pages/EducationPage.php b/includes/pages/EducationPage.php
index 3c077bc..3c5c589 100644
--- a/includes/pages/EducationPage.php
+++ b/includes/pages/EducationPage.php
@@ -6,7 +6,6 @@
 use Title;
 use WikiPage;
 use Exception;
-use Language;
 
 /**
  * Abstract Page for interacting with a PageObject.
diff --git a/includes/rows/ORMRow.php b/includes/rows/ORMRow.php
index 5f4a444..717c37d 100644
--- a/includes/rows/ORMRow.php
+++ b/includes/rows/ORMRow.php
@@ -377,7 +377,7 @@
 
                $this->table->releaseConnection( $dbw );
 
-               // DatabaseBase::update does not always return true for success 
as documented...
+               // Database::update does not always return true for success as 
documented...
                return $success !== false;
        }
 
@@ -414,7 +414,7 @@
                        $options
                );
 
-               // DatabaseBase::insert does not always return true for success 
as documented...
+               // Database::insert does not always return true for success as 
documented...
                $success = $success !== false;
 
                if ( $success ) {
diff --git a/includes/specials/SpecialMyCourses.php 
b/includes/specials/SpecialMyCourses.php
index c0f5256..aca6c35 100644
--- a/includes/specials/SpecialMyCourses.php
+++ b/includes/specials/SpecialMyCourses.php
@@ -180,7 +180,7 @@
                $this->addCachedHTML(
                        function ( Course $course, IContextSource $context ) {
                                // TODO: inject dependency
-                               $eventStore = new 
\EducationProgram\Events\EventStore( 'ep_events' );
+                               $eventStore = new EventStore( 'ep_events' );
 
                                $query = new EventQuery();
 
diff --git a/includes/tables/IORMTable.php b/includes/tables/IORMTable.php
index 930594c..e904b1a 100644
--- a/includes/tables/IORMTable.php
+++ b/includes/tables/IORMTable.php
@@ -2,6 +2,11 @@
 
 namespace EducationProgram;
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\ResultWrapper;
+
 /**
  * Interface for objects representing a single database table.
  * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
@@ -100,7 +105,7 @@
         * Selects the specified fields of the records matching the provided
         * conditions and returns them as DBDataObject. Field names get 
prefixed.
         *
-        * @see DatabaseBase::select()
+        * @see Database::select
         *
         * @since 1.20
         *
@@ -110,7 +115,7 @@
         * @param string|null $functionName
         *
         * @return ORMResult The result set
-        * @throws \DBQueryError If the query failed (even if the database was 
in ignoreErrors mode)
+        * @throws DBQueryError If the query failed (even if the database was 
in ignoreErrors mode)
         */
        public function select( $fields = null, array $conditions = [],
                array $options = [], $functionName = null );
@@ -141,8 +146,8 @@
         * @param array $options
         * @param null|string $functionName
         *
-        * @return \ResultWrapper
-        * @throws \DBQueryError If the query failed (even if the database was 
in ignoreErrors mode)
+        * @return ResultWrapper
+        * @throws DBQueryError If the query failed (even if the database was 
in ignoreErrors mode)
         */
        public function rawSelect( $fields = null, array $conditions = [],
                array $options = [], $functionName = null );
@@ -199,7 +204,7 @@
         * @param array $options
         * @param string|null $functionName
         *
-        * @return \ResultWrapper
+        * @return ResultWrapper
         */
        public function rawSelectRow( array $fields, array $conditions = [],
                array $options = [], $functionName = null );
@@ -250,7 +255,7 @@
         * Condition field names get prefixed.
         *
         * Note that this can be expensive on large tables.
-        * In such cases you might want to use DatabaseBase::estimateRowCount 
instead.
+        * In such cases you might want to use Database::estimateRowCount 
instead.
         *
         * @since 1.20
         *
@@ -342,7 +347,7 @@
         *
         * @since 1.20
         *
-        * @return \DatabaseBase The database object
+        * @return Database The database object
         */
        public function getReadDbConnection();
 
@@ -354,7 +359,7 @@
         *
         * @since 1.20
         *
-        * @return \DatabaseBase The database object
+        * @return Database The database object
         */
        public function getWriteDbConnection();
 
@@ -365,7 +370,7 @@
         *
         * @since 1.20
         *
-        * @return \LoadBalancer The database load balancer object
+        * @return LoadBalancer The database load balancer object
         */
        public function getLoadBalancer();
 
@@ -375,11 +380,11 @@
         *
         * @see LoadBalancer::reuseConnection
         *
-        * @param \DatabaseBase $db The database
+        * @param Database $db The database
         *
         * @since 1.20
         */
-       public function releaseConnection( \DatabaseBase $db );
+       public function releaseConnection( Database $db );
 
        /**
         * Update the records matching the provided conditions by
diff --git a/includes/tables/ORMTable.php b/includes/tables/ORMTable.php
index 73bbdbe..308a210 100644
--- a/includes/tables/ORMTable.php
+++ b/includes/tables/ORMTable.php
@@ -2,6 +2,10 @@
 
 namespace EducationProgram;
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\ResultWrapper;
+
 /**
  * Abstract base class for representing a single database table.
  * Documentation inline and at https://www.mediawiki.org/wiki/Manual:ORMTable
@@ -223,7 +227,7 @@
         * @param string|null $functionName
         *
         * @return array Array of row objects
-        * @throws \DBQueryError If the query failed (even if the database was 
in ignoreErrors mode).
+        * @throws DBQueryError If the query failed (even if the database was 
in ignoreErrors mode).
         */
        public function selectObjects( $fields = null, array $conditions = [],
                array $options = [], $functionName = null
@@ -248,7 +252,7 @@
         * @param array $conditions
         * @param array $options
         * @param null|string $functionName
-        * @return \ResultWrapper
+        * @return ResultWrapper
         * @throws \Exception
         * @throws \MWException
         */
@@ -276,7 +280,7 @@
                if ( $result === false ) {
                        // Database connection was in "ignoreErrors" mode. We 
don't like that.
                        // So, we emulate the DBQueryError that should have 
been thrown.
-                       $error = new \DBQueryError(
+                       $error = new DBQueryError(
                                $dbr,
                                $dbr->lastError(),
                                $dbr->lastErrno(),
@@ -465,7 +469,7 @@
         * Condition field names get prefixed.
         *
         * Note that this can be expensive on large tables.
-        * In such cases you might want to use DatabaseBase::estimateRowCount 
instead.
+        * In such cases you might want to use Database::estimateRowCount 
instead.
         *
         * @since 1.20
         *
@@ -502,7 +506,7 @@
                        $this->getName(),
                        $conditions === [] ? '*' : $this->getPrefixedValues( 
$conditions ),
                        is_null( $functionName ) ? __METHOD__ : $functionName
-               ) !== false; // DatabaseBase::delete does not always return 
true for success as documented...
+               ) !== false; // Database::delete does not always return true 
for success as documented...
 
                $this->releaseConnection( $dbw );
 
@@ -628,7 +632,7 @@
         *
         * @since 1.20
         *
-        * @return \DatabaseBase The database object
+        * @return Database The database object
         */
        public function getReadDbConnection() {
                return $this->getConnection( $this->getReadDb(), [] );
@@ -642,7 +646,7 @@
         *
         * @since 1.20
         *
-        * @return \DatabaseBase The database object
+        * @return Database The database object
         */
        public function getWriteDbConnection() {
                return $this->getConnection( DB_MASTER, [] );
@@ -654,12 +658,12 @@
         *
         * @see LoadBalancer::reuseConnection
         *
-        * @param \DatabaseBase $db
+        * @param Database $db
         *
         * @since 1.20
         */
        // @codingStandardsIgnoreStart Suppress "useless method overriding" 
sniffer warning
-       public function releaseConnection( \DatabaseBase $db ) {
+       public function releaseConnection( Database $db ) {
                parent::releaseConnection( $db ); // just make it public
        }
        // @codingStandardsIgnoreEnd
@@ -684,7 +688,7 @@
                        $this->getPrefixedValues( $values ),
                        $this->getPrefixedValues( $conditions ),
                        __METHOD__
-               ) !== false; // DatabaseBase::update does not always return 
true for success as documented...
+               ) !== false; // Database::update does not always return true 
for success as documented...
 
                $this->releaseConnection( $dbw );
 
@@ -1016,7 +1020,7 @@
 
                $this->releaseConnection( $dbw );
 
-               // DatabaseBase::update does not always return true for success 
as documented...
+               // Database::update does not always return true for success as 
documented...
                return $success !== false;
        }
 
@@ -1041,7 +1045,7 @@
                        $options
                );
 
-               // DatabaseBase::insert does not always return true for success 
as documented...
+               // Database::insert does not always return true for success as 
documented...
                $success = $success !== false;
 
                if ( $success ) {
@@ -1103,7 +1107,7 @@
                        is_null( $functionName ) ? __METHOD__ : $functionName
                );
 
-               // DatabaseBase::delete does not always return true for success 
as documented...
+               // Database::delete does not always return true for success as 
documented...
                return $success !== false;
        }
 
@@ -1140,7 +1144,7 @@
                        [ "$fullField=$fullField" . ( $isNegative ? '-' : '+' ) 
. $absoluteAmount ],
                        $this->getPrefixedValues( $conditions ),
                        __METHOD__
-               ) !== false; // DatabaseBase::update does not always return 
true for success as documented...
+               ) !== false; // Database::update does not always return true 
for success as documented...
 
                $this->releaseConnection( $dbw );
 
diff --git a/maintenance/importWEPFromDB.php b/maintenance/importWEPFromDB.php
index bfbdc9d..5eb5388 100644
--- a/maintenance/importWEPFromDB.php
+++ b/maintenance/importWEPFromDB.php
@@ -14,7 +14,7 @@
 
 namespace EducationProgram;
 
-use ResultWrapper;
+use Wikimedia\Rdbms\ResultWrapper;
 
 $basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' 
) : __DIR__ . '/../../..';
 
diff --git a/tests/phpunit/ArticleAdderTest.php 
b/tests/phpunit/ArticleAdderTest.php
index ab3d95d..bccba4e 100644
--- a/tests/phpunit/ArticleAdderTest.php
+++ b/tests/phpunit/ArticleAdderTest.php
@@ -4,6 +4,7 @@
 
 use EducationProgram\ArticleAdder;
 use EducationProgram\ArticleStore;
+use User;
 
 /**
  * Tests for the EducationProgram\ArticleAdder class.
@@ -76,7 +77,7 @@
         * @param string $pageTitle
         * @param int[] $reviewers
         */
-       public function testAddArticle( $actionUser, $courseId, $userId, 
$pageId, $pageTitle, array $reviewers ) {
+       public function testAddArticle( User $actionUser, $courseId, $userId, 
$pageId, $pageTitle, array $reviewers ) {
                $adder = $this->newAdder();
 
                $success = $adder->addArticle( $actionUser, $courseId, $userId, 
$pageId, $pageTitle, $reviewers );
diff --git a/tests/phpunit/EPArticleTest.php b/tests/phpunit/EPArticleTest.php
index a1c0cbd..80d6353 100644
--- a/tests/phpunit/EPArticleTest.php
+++ b/tests/phpunit/EPArticleTest.php
@@ -274,14 +274,14 @@
        }
 
        public function testLogAdditionNonExistingPage() {
-               $course = $this->getMock( 'EducationProgram\Course' );
+               $course = $this->getMock( Course::class );
 
                $course->expects( $this->any() )
                        ->method( 'getTitle' )
                        ->will( $this->returnValue( \Title::newFromText( 
'Foobar' ) ) );
 
                $article = $this->getMock(
-                       'EducationProgram\EPArticle',
+                       EPArticle::class,
                        [ 'getCourse', 'getUser' ],
                        [ 1, 2, 3, 0, 'sdncjsdhbfkdhbgsfxdfg', [] ]
                );
diff --git a/tests/phpunit/db/ORMTableTest.php 
b/tests/phpunit/db/ORMTableTest.php
index b5c61d2..2843385 100644
--- a/tests/phpunit/db/ORMTableTest.php
+++ b/tests/phpunit/db/ORMTableTest.php
@@ -2,9 +2,9 @@
 
 namespace EducationProgram\Tests;
 
-use EducationProgram\IORMRow;
 use EducationProgram\IORMTable;
 use EducationProgram\ORMTable;
+use Title;
 
 /**
  * Abstract class to construct tests for ORMTable deriving classes.
@@ -104,7 +104,7 @@
         * @return string
         */
        public function getRowClass() {
-               return 'Title';
+               return Title::class;
        }
 
        /**
@@ -113,7 +113,7 @@
         * @return IORMRow
         */
        public function newRow( array $data, $loadDefaults = false ) {
-               return \Title::makeTitle( $data['namespace'], $data['title'] );
+               return Title::makeTitle( $data['namespace'], $data['title'] );
        }
 
        /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I528ce0256998ce2cef6ba274f8b973e50324a0e4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/EducationProgram
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de>

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

Reply via email to