From 7585985a463964d56ebb4b56b31c467fd98a7684 Mon Sep 17 00:00:00 2001 From: Lucas Werkmeister Date: Mon, 10 Dec 2018 18:33:38 +0100 Subject: [PATCH] Fully extract services framework as a library MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This code doesn’t use any MediaWiki-specific code, so rename MediaWiki\Services to Wikimedia\Services and move it below libs/. (Of course, this does not apply to the MediaWikiServices subclass.) Class aliases are added to retain backwards compatibity for now. Bug: T211608 Change-Id: Ic14ea28ef21c359695b309d4293dbaaf5deedc09 --- RELEASE-NOTES-1.33 | 2 ++ autoload.php | 8 +++++ includes/AutoLoader.php | 2 +- includes/MediaWikiServices.php | 6 ++-- includes/config/ConfigFactory.php | 2 +- includes/config/ConfigRepository.php | 2 +- includes/installer/Installer.php | 2 +- .../CannotReplaceActiveServiceException.php | 9 ++++- .../services/ContainerDisabledException.php | 8 ++++- .../services/DestructibleService.php | 8 ++++- .../services/NoSuchServiceException.php | 8 ++++- .../services/SalvageableService.php | 8 ++++- .../ServiceAlreadyDefinedException.php | 9 ++++- .../{ => libs}/services/ServiceContainer.php | 16 ++++++--- .../services/ServiceDisabledException.php | 8 ++++- .../includes/MediaWikiServicesTest.php | 10 +++--- .../services/ServiceContainerTest.php | 34 +++++++++---------- .../{ => libs}/services/TestWiring1.php | 0 .../{ => libs}/services/TestWiring2.php | 0 19 files changed, 100 insertions(+), 42 deletions(-) rename includes/{ => libs}/services/CannotReplaceActiveServiceException.php (84%) rename includes/{ => libs}/services/ContainerDisabledException.php (85%) rename includes/{ => libs}/services/DestructibleService.php (88%) rename includes/{ => libs}/services/NoSuchServiceException.php (85%) rename includes/{ => libs}/services/SalvageableService.php (91%) rename includes/{ => libs}/services/ServiceAlreadyDefinedException.php (85%) rename includes/{ => libs}/services/ServiceContainer.php (97%) rename includes/{ => libs}/services/ServiceDisabledException.php (85%) rename tests/phpunit/includes/{ => libs}/services/ServiceContainerTest.php (92%) rename tests/phpunit/includes/{ => libs}/services/TestWiring1.php (100%) rename tests/phpunit/includes/{ => libs}/services/TestWiring2.php (100%) diff --git a/RELEASE-NOTES-1.33 b/RELEASE-NOTES-1.33 index c0dd84f56e..f3899e0085 100644 --- a/RELEASE-NOTES-1.33 +++ b/RELEASE-NOTES-1.33 @@ -201,6 +201,8 @@ because of Phabricator reports. Title::getUserPermissionsErrors() and Title::userCan(). Previously, the method was only called in Action::checkCanExecute(). Actions should ensure that their requiresUnblock() returns the proper result (the default is `true`). +* (T211608) The MediaWiki\Services namespace has been renamed to + Wikimedia\Services. The old name is still supported, but deprecated. * … === Other changes in 1.33 === diff --git a/autoload.php b/autoload.php index 91be2e71b9..afc187fd85 100644 --- a/autoload.php +++ b/autoload.php @@ -903,6 +903,14 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\OutputHandler' => __DIR__ . '/includes/OutputHandler.php', 'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php', 'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php', + 'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/libs/services/CannotReplaceActiveServiceException.php', + 'MediaWiki\\Services\\ContainerDisabledException' => __DIR__ . '/includes/libs/services/ContainerDisabledException.php', + 'MediaWiki\\Services\\DestructibleService' => __DIR__ . '/includes/libs/services/DestructibleService.php', + 'MediaWiki\\Services\\NoSuchServiceException' => __DIR__ . '/includes/libs/services/NoSuchServiceException.php', + 'MediaWiki\\Services\\SalvageableService' => __DIR__ . '/includes/libs/services/SalvageableService.php', + 'MediaWiki\\Services\\ServiceAlreadyDefinedException' => __DIR__ . '/includes/libs/services/ServiceAlreadyDefinedException.php', + 'MediaWiki\\Services\\ServiceContainer' => __DIR__ . '/includes/libs/services/ServiceContainer.php', + 'MediaWiki\\Services\\ServiceDisabledException' => __DIR__ . '/includes/libs/services/ServiceDisabledException.php', 'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php', 'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php', 'MediaWiki\\Special\\SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php', diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 677fd01b54..9dbc9eb006 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -136,12 +136,12 @@ class AutoLoader { 'MediaWiki\\Linker\\' => __DIR__ . '/linker/', 'MediaWiki\\Preferences\\' => __DIR__ . '/preferences/', 'MediaWiki\\Revision\\' => __DIR__ . '/Revision/', - 'MediaWiki\\Services\\' => __DIR__ . '/services/', 'MediaWiki\\Session\\' => __DIR__ . '/session/', 'MediaWiki\\Shell\\' => __DIR__ . '/shell/', 'MediaWiki\\Sparql\\' => __DIR__ . '/sparql/', 'MediaWiki\\Storage\\' => __DIR__ . '/Storage/', 'MediaWiki\\Tidy\\' => __DIR__ . '/tidy/', + 'Wikimedia\\Services\\' => __DIR__ . '/libs/services/', ]; } } diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 0e36b22367..4abd729d45 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -36,9 +36,6 @@ use MediaHandlerFactory; use MediaWiki\Config\ConfigRepository; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; -use MediaWiki\Services\SalvageableService; -use MediaWiki\Services\ServiceContainer; -use MediaWiki\Services\NoSuchServiceException; use MWException; use MimeAnalyzer; use ObjectCache; @@ -58,6 +55,9 @@ use SkinFactory; use TitleFormatter; use TitleParser; use VirtualRESTServiceClient; +use Wikimedia\Services\SalvageableService; +use Wikimedia\Services\ServiceContainer; +use Wikimedia\Services\NoSuchServiceException; use MediaWiki\Interwiki\InterwikiLookup; use MagicWordFactory; diff --git a/includes/config/ConfigFactory.php b/includes/config/ConfigFactory.php index 2c7afdae07..769364fd1f 100644 --- a/includes/config/ConfigFactory.php +++ b/includes/config/ConfigFactory.php @@ -20,8 +20,8 @@ * * @file */ -use MediaWiki\Services\SalvageableService; use Wikimedia\Assert\Assert; +use Wikimedia\Services\SalvageableService; /** * Factory class to create Config objects diff --git a/includes/config/ConfigRepository.php b/includes/config/ConfigRepository.php index c87a3440b6..96dc51c118 100644 --- a/includes/config/ConfigRepository.php +++ b/includes/config/ConfigRepository.php @@ -22,8 +22,8 @@ namespace MediaWiki\Config; -use MediaWiki\Services\SalvageableService; use Wikimedia\Assert\Assert; +use Wikimedia\Services\SalvageableService; /** * Object which holds currently registered configuration options. diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 029f67d57a..5a3d77adf4 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -694,7 +694,7 @@ abstract class Installer { 'enableSectionEditLinks' => false, 'unwrap' => true, ] ); - } catch ( MediaWiki\Services\ServiceDisabledException $e ) { + } catch ( Wikimedia\Services\ServiceDisabledException $e ) { $html = ' ' . htmlspecialchars( $text ); } diff --git a/includes/services/CannotReplaceActiveServiceException.php b/includes/libs/services/CannotReplaceActiveServiceException.php similarity index 84% rename from includes/services/CannotReplaceActiveServiceException.php rename to includes/libs/services/CannotReplaceActiveServiceException.php index 499307372d..ee0d7d00ae 100644 --- a/includes/services/CannotReplaceActiveServiceException.php +++ b/includes/libs/services/CannotReplaceActiveServiceException.php @@ -1,5 +1,5 @@ disabled[$name] ); } } + +/** + * Retain the old class name for backwards compatibility. + * @deprecated since 1.33 + */ +class_alias( ServiceContainer::class, 'MediaWiki\Services\ServiceContainer' ); diff --git a/includes/services/ServiceDisabledException.php b/includes/libs/services/ServiceDisabledException.php similarity index 85% rename from includes/services/ServiceDisabledException.php rename to includes/libs/services/ServiceDisabledException.php index ae15b7cea5..86b927bddf 100644 --- a/includes/services/ServiceDisabledException.php +++ b/includes/libs/services/ServiceDisabledException.php @@ -1,5 +1,5 @@ createMock( MediaWiki\Services\DestructibleService::class ); + $service = $this->createMock( Wikimedia\Services\DestructibleService::class ); $service->expects( $this->once() )->method( 'destroy' ); return $service; } @@ -248,7 +248,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { $services->defineService( 'Test', function () { - $service = $this->createMock( MediaWiki\Services\DestructibleService::class ); + $service = $this->createMock( Wikimedia\Services\DestructibleService::class ); $service->expects( $this->never() )->method( 'destroy' ); return $service; } diff --git a/tests/phpunit/includes/services/ServiceContainerTest.php b/tests/phpunit/includes/libs/services/ServiceContainerTest.php similarity index 92% rename from tests/phpunit/includes/services/ServiceContainerTest.php rename to tests/phpunit/includes/libs/services/ServiceContainerTest.php index aca88aa4b6..6674a15012 100644 --- a/tests/phpunit/includes/services/ServiceContainerTest.php +++ b/tests/phpunit/includes/libs/services/ServiceContainerTest.php @@ -1,14 +1,12 @@ setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); + $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class ); $services->getService( $name ); } @@ -114,7 +112,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { $name = 'TestService92834576'; - $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); + $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class ); $services->peekService( $name ); } @@ -144,7 +142,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { return $theService; } ); - $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class ); + $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class ); $services->defineService( $name, function () use ( $theService ) { return $theService; @@ -258,7 +256,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { ]; // loading the same file twice should fail, because - $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class ); + $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class ); $services->loadWiringFiles( $wiringFiles ); } @@ -316,7 +314,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); + $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -336,7 +334,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { // create the service, so it can no longer be redefined $services->getService( $name ); - $this->setExpectedException( MediaWiki\Services\CannotReplaceActiveServiceException::class ); + $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -383,7 +381,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); + $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class ); $services->addServiceManipulator( $name, function () use ( $theService ) { return $theService; @@ -403,7 +401,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { // create the service, so it can no longer be redefined $services->getService( $name ); - $this->setExpectedException( MediaWiki\Services\CannotReplaceActiveServiceException::class ); + $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class ); $services->addServiceManipulator( $name, function () { return 'Foo'; @@ -413,7 +411,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { public function testDisableService() { $services = $this->newServiceContainer( [ 'Foo' ] ); - $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class ) + $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class ) ->getMock(); $destructible->expects( $this->once() ) ->method( 'destroy' ); @@ -452,7 +450,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { $this->assertContains( 'Bar', $services->getServiceNames() ); $this->assertContains( 'Qux', $services->getServiceNames() ); - $this->setExpectedException( MediaWiki\Services\ServiceDisabledException::class ); + $this->setExpectedException( Wikimedia\Services\ServiceDisabledException::class ); $services->getService( 'Qux' ); } @@ -462,7 +460,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { $theService = new stdClass(); $name = 'TestService92834576'; - $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class ); + $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class ); $services->redefineService( $name, function () use ( $theService ) { return $theService; @@ -472,7 +470,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { public function testDestroy() { $services = $this->newServiceContainer(); - $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class ) + $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class ) ->getMock(); $destructible->expects( $this->once() ) ->method( 'destroy' ); @@ -491,7 +489,7 @@ class ServiceContainerTest extends PHPUnit\Framework\TestCase { // destroy the container $services->destroy(); - $this->setExpectedException( MediaWiki\Services\ContainerDisabledException::class ); + $this->setExpectedException( Wikimedia\Services\ContainerDisabledException::class ); $services->getService( 'Bar' ); } diff --git a/tests/phpunit/includes/services/TestWiring1.php b/tests/phpunit/includes/libs/services/TestWiring1.php similarity index 100% rename from tests/phpunit/includes/services/TestWiring1.php rename to tests/phpunit/includes/libs/services/TestWiring1.php diff --git a/tests/phpunit/includes/services/TestWiring2.php b/tests/phpunit/includes/libs/services/TestWiring2.php similarity index 100% rename from tests/phpunit/includes/services/TestWiring2.php rename to tests/phpunit/includes/libs/services/TestWiring2.php -- 2.20.1