Merge "Don't return expired user groups in UserRightsProxy"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 31 Jan 2017 17:02:15 +0000 (17:02 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 31 Jan 2017 17:02:16 +0000 (17:02 +0000)
19 files changed:
RELEASE-NOTES-1.29
autoload.php
docs/extension.schema.v1.json
includes/MediaWiki.php
includes/libs/objectcache/WANObjectCacheReaper.php
includes/libs/rdbms/ChronologyProtector.php
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/objectcache/SqlBagOStuff.php
includes/profiler/Profiler.php
languages/i18n/en.json
tests/parser/TestFileEditor.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/db/DatabaseTestHelper.php
tests/phpunit/includes/db/LBFactoryTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/specials/SpecialSearchTest.php [deleted file]

index 883729b..8fa29c1 100644 (file)
@@ -134,7 +134,8 @@ changes to languages because of Phabricator reports.
   Some configurations (such as date formats and gender namespaces) have also
   been updated when using the fallback language's configuration was inadequate.
   The new or reinstated language fallbacks are (after cs ↔ sk in 1.28):
-  hsb ↔ dsb, io → eo, mdf → ru, pnt → el, roa-tara → it.
+  ca ↔ oc; hsb ↔ dsb; io → eo; mdf → ru; pnt → el; roa-tara → it; rup → ro;
+  sh → bs, sr-el, hr.
 
 ==== No fallback for Ukrainian ====
 * (T39314) The fallback from Ukrainian to Russian was removed. The Ukrainian
index 2bc110c..a6840b4 100644 (file)
@@ -247,7 +247,6 @@ $wgAutoloadLocalClasses = [
        'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php',
        'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php',
        'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php',
-       'ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
        'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
        'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php',
@@ -1461,7 +1460,6 @@ $wgAutoloadLocalClasses = [
        'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
        'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php',
        'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
-       'TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
@@ -1589,8 +1587,10 @@ $wgAutoloadLocalClasses = [
        'WikiRevision' => __DIR__ . '/includes/import/WikiRevision.php',
        'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php',
+       'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
        'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
+       'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
        'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
        'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php',
index 421ea5c..3d6eda9 100644 (file)
                },
                "requires": {
                        "type": "object",
-                       "description": "Indicates what versions of MediaWiki core are required. This syntax may be extended in the future, for example to check dependencies between other extensions.",
+                       "description": "Indicates what versions of MediaWiki core or extensions are required. This syntax may be extended in the future, for example to check dependencies between other services.",
+                       "additionalProperties": false,
                        "properties": {
                                "MediaWiki": {
                                        "type": "string",
                                        "description": "Version constraint string against MediaWiki core."
+                               },
+                               "extensions": {
+                                       "type": "object",
+                                       "description": "Set of version constraint strings against specific extensions."
+                               },
+                               "skins": {
+                                       "type": "object",
+                                       "description": "Set of version constraint strings against specific skins."
                                }
                        }
                },
index faca533..3e72d54 100644 (file)
@@ -22,6 +22,7 @@
 
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\ChronologyProtector;
 
 /**
  * The MediaWiki class is the helper class for the index.php entry point.
index 62e4536..956a3a9 100644 (file)
@@ -23,6 +23,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\ScopedCallback;
 
 /**
  * Class for scanning through chronological, log-structured data or change logs
index 88af1db..dfe950e 100644 (file)
  * @file
  * @ingroup Database
  */
+
+namespace Wikimedia\Rdbms;
+
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
 use Wikimedia\WaitConditionLoop;
+use BagOStuff;
+use DBMasterPos;
+use ILoadBalancer;
 
 /**
  * Class for ensuring a consistent ordering of events as seen by the user, despite replication.
@@ -72,7 +79,7 @@ class ChronologyProtector implements LoggerAwareInterface {
                $this->clientId = md5( $client['ip'] . "\n" . $client['agent'] );
                $this->key = $store->makeGlobalKey( __CLASS__, $this->clientId );
                $this->waitForPosTime = $posTime;
-               $this->logger = new \Psr\Log\NullLogger();
+               $this->logger = new NullLogger();
        }
 
        public function setLogger( LoggerInterface $logger ) {
index bf5e299..5d3534f 100644 (file)
  * @author Aaron Schulz
  */
 
+namespace Wikimedia\Rdbms;
+
 use Psr\Log\LoggerInterface;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\NullLogger;
+use RuntimeException;
 
 /**
  * Helper class that detects high-contention DB queries via profiling calls
index 69cf1ac..68d500b 100644 (file)
@@ -26,6 +26,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\TransactionProfiler;
 
 /**
  * Relational database abstraction object
index 77d4aa9..f580eeb 100644 (file)
@@ -23,6 +23,8 @@
 
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\TransactionProfiler;
+use Wikimedia\Rdbms\ChronologyProtector;
 
 /**
  * An interface for generating database load balancers
index 95f55b6..78f905c 100644 (file)
@@ -22,6 +22,7 @@
  */
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\TransactionProfiler;
 
 /**
  * Database connection, tracking, load balancing, and transaction manager for a cluster
index de49fc3..5fd3348 100644 (file)
@@ -23,6 +23,7 @@
 
 use \MediaWiki\MediaWikiServices;
 use \Wikimedia\WaitConditionLoop;
+use \Wikimedia\Rdbms\TransactionProfiler;
 
 /**
  * Class to store objects in the database
index 8b4f01a..252a227 100644 (file)
@@ -22,6 +22,7 @@
  * @defgroup Profiler Profiler
  */
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\TransactionProfiler;
 
 /**
  * Profiler base class that defines the interface and some trivial
index 81d9af1..2db5f4c 100644 (file)
        "editusergroup": "Load user groups",
        "editinguser": "Changing user rights of {{GENDER:$1|user}} <strong>[[User:$1|$1]]</strong> $2",
        "viewinguserrights": "Viewing user rights of {{GENDER:$1|user}} <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Edit user groups",
-       "userrights-viewusergroup": "View user groups",
+       "userrights-editusergroup": "Edit {{GENDER:$1|user}} groups",
+       "userrights-viewusergroup": "View {{GENDER:$1|user}} groups",
        "saveusergroups": "Save {{GENDER:$1|user}} groups",
        "userrights-groupsmember": "Member of:",
        "userrights-groupsmember-auto": "Implicit member of:",
index 05b1216..7f64671 100644 (file)
@@ -125,7 +125,7 @@ class TestFileEditor {
                $line = $this->lines[$this->pos++];
                $heading = $this->getHeading( $line );
                $expectedEnd = 'end' . $heading;
-               $contents = $line;
+               $contents = "$line\n";
 
                do {
                        $line = $this->lines[$this->pos++];
index 81b75de..3b69590 100644 (file)
@@ -25,6 +25,8 @@
  * @copyright © 2013 Wikimedia Foundation Inc.
  */
 
+use Wikimedia\Rdbms\TransactionProfiler;
+
 /**
  * Fake class around abstract class so we can call concrete methods.
  */
index c5603c4..d689d50 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\TransactionProfiler;
+
 /**
  * Helper for testing the methods from the Database class
  * @since 1.22
index 573b395..1a52dde 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\Rdbms\ChronologyProtector;
+
 /**
  * Holds tests for LBFactory abstract MediaWiki class.
  *
index e9cf6a3..13c21c0 100644 (file)
@@ -205,6 +205,27 @@ class SpecialSearchTest extends MediaWikiTestCase {
 
                return $mock;
        }
+
+       public function testSubPageRedirect() {
+               $this->setMwGlobals( [
+                       'wgScript' => '/w/index.php',
+               ] );
+
+               $ctx = new RequestContext;
+               $sp = Title::newFromText( 'Special:Search/foo_bar' );
+               SpecialPageFactory::executePath( $sp, $ctx );
+               $url = $ctx->getOutput()->getRedirect();
+               // some older versions of hhvm have a bug that doesn't parse relative
+               // urls with a port, so help it out a little bit.
+               // https://github.com/facebook/hhvm/issues/7136
+               $url = wfExpandUrl( $url, PROTO_CURRENT );
+
+               $parts = parse_url( $url );
+               $this->assertEquals( '/w/index.php', $parts['path'] );
+               parse_str( $parts['query'], $query );
+               $this->assertEquals( 'Special:Search', $query['title'] );
+               $this->assertEquals( 'foo bar', $query['search'] );
+       }
 }
 
 class SpecialSearchTestMockResultSet extends SearchResultSet {
diff --git a/tests/phpunit/specials/SpecialSearchTest.php b/tests/phpunit/specials/SpecialSearchTest.php
deleted file mode 100644 (file)
index 20e88f5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-class SpecialSearchText extends \PHPUnit_Framework_TestCase {
-       public function testSubPageRedirect() {
-               $ctx = new RequestContext;
-
-               SpecialPageFactory::executePath(
-                       Title::newFromText( 'Special:Search/foo_bar' ),
-                       $ctx
-               );
-               $url = $ctx->getOutput()->getRedirect();
-               // some older versions of hhvm have a bug that doesn't parse relative
-               // urls with a port, so help it out a little bit.
-               // https://github.com/facebook/hhvm/issues/7136
-               $url = wfExpandUrl( $url, PROTO_CURRENT );
-
-               $parts = parse_url( $url );
-               $this->assertEquals( '/w/index.php', $parts['path'] );
-               parse_str( $parts['query'], $query );
-               $this->assertEquals( 'Special:Search', $query['title'] );
-               $this->assertEquals( 'foo bar', $query['search'] );
-       }
-}