Seb35 has uploaded a new change for review. https://gerrit.wikimedia.org/r/321187
Change subject: Added special configuration to force a loading mechanism ...................................................................... Added special configuration to force a loading mechanism Sometimes it is mandatory to use require_once, particularly when an extension is required by a second extension is require_once-only. I recently encounter the case for: * Translate (require_once-only) and UniversalLanguageSelector (bi-loading, but required by Translate) * BlueSpiceFoundation (bi-loading but required by BlueSpiceExtensions (require_once-only) Obviously this will change in the future and this feature will become unuseful, but for now it is really needed. Change-Id: Ib7dde20a0b780d9e80a788e4000916971e3a08b3 --- M src/MediaWikiFarm.php M tests/phpunit/ConfigurationTest.php M tests/phpunit/LoadingTest.php M tests/phpunit/data/config/extensionssettings.php M tests/phpunit/data/config/testextensionsfarmversions.php 5 files changed, 54 insertions(+), 12 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MediaWikiFarm refs/changes/87/321187/1 diff --git a/src/MediaWikiFarm.php b/src/MediaWikiFarm.php index 77dbdcd..2bb6be9 100644 --- a/src/MediaWikiFarm.php +++ b/src/MediaWikiFarm.php @@ -1296,31 +1296,43 @@ # Search for skin and extension activation foreach( $settings as $setting => $value ) { - if( preg_match( '/^wgUse(Extension|Skin)(.+)$/', $setting, $matches ) && $value === true ) { + if( preg_match( '/^wgUse(Extension|Skin)(.+)$/', $setting, $matches ) && ( $value === true || $value == 'require_once' || $value == 'composer' ) ) { $type = strtolower( $matches[1] ); $name = $matches[2]; $loadingMechanism = $this->detectLoadingMechanism( $type, $name ); + if( $value !== true ) { + $loadingMechanism = $value; + } if( is_null( $loadingMechanism ) ) { $settings[$setting] = false; } else { $this->configuration[$type.'s'][$name] = $loadingMechanism; + $settings[preg_replace( '/[^a-zA-Z0-9_\x7f\xff]/', '', $setting )] = true; } } - elseif( preg_match( '/^wgUse(.+)$/', $setting, $matches ) && $value === true ) { + elseif( preg_match( '/^wgUse(.+)$/', $setting, $matches ) && ( $value === true || $value == 'require_once' || $value == 'composer' ) ) { $name = $matches[1]; $loadingMechanism = $this->detectLoadingMechanism( 'extension', $name ); if( !is_null( $loadingMechanism ) ) { + if( $value !== true ) { + $loadingMechanism = $value; + } $this->configuration['extensions'][$name] = $loadingMechanism; $settings['wgUseExtension'.preg_replace( '/[^a-zA-Z0-9_\x7f\xff]/', '', $name )] = true; + unset( $settings[$setting] ); } else { $loadingMechanism = $this->detectLoadingMechanism( 'skin', $name ); if( !is_null( $loadingMechanism ) ) { + if( $value !== true ) { + $loadingMechanism = $value; + } $this->configuration['skins'][$name] = $loadingMechanism; $settings['wgUseSkin'.preg_replace( '/[^a-zA-Z0-9_\x7f\xff]/', '', $name )] = true; + unset( $settings[$setting] ); } } } diff --git a/tests/phpunit/ConfigurationTest.php b/tests/phpunit/ConfigurationTest.php index 7bd539f..c9cd346 100644 --- a/tests/phpunit/ConfigurationTest.php +++ b/tests/phpunit/ConfigurationTest.php @@ -158,6 +158,39 @@ $this->assertEquals( 'wfLoadExtension', $extensions['TestExtensionBiLoading'] ); $this->assertEquals( 'wfLoadExtension', $extensions['TestExtensionWfLoadExtension'] ); $this->assertEquals( 'wfLoadExtension', $extensions['MediaWikiFarm'] ); + + # Now with imposed loading mechanism (1) + $farm = new MediaWikiFarm( 'c.testfarm-multiversion-test-extensions.example.org', + self::$wgMediaWikiFarmConfigDir, dirname( __FILE__ ) . '/data/mediawiki', false, + array( 'EntryPoint' => 'index.php' ) + ); + + $farm->checkExistence(); + $farm->getMediaWikiConfig(); + $settings = $farm->getConfiguration( 'settings' ); + $extensions = $farm->getConfiguration( 'extensions' ); + $this->assertTrue( $settings['wgUseExtensionTestExtensionBiLoading'] ); + $this->assertArrayHasKey( 'TestExtensionBiLoading', $extensions ); + $this->assertEquals( 'require_once', $extensions['TestExtensionBiLoading'] ); + + # Now with imposed loading mechanism (2) + $farm = new MediaWikiFarm( 'd.testfarm-multiversion-test-extensions.example.org', + self::$wgMediaWikiFarmConfigDir, dirname( __FILE__ ) . '/data/mediawiki', false, + array( 'EntryPoint' => 'index.php' ) + ); + + $farm->checkExistence(); + $farm->getMediaWikiConfig(); + $settings = $farm->getConfiguration( 'settings' ); + #$this->assertEquals( [], $settings ); + $extensions = $farm->getConfiguration( 'extensions' ); + $skins = $farm->getConfiguration( 'skins' ); + $this->assertTrue( $settings['wgUseExtensionTestExtensionBiLoading'] ); + $this->assertTrue( $settings['wgUseSkinTestSkinBiLoading'] ); + $this->assertArrayHasKey( 'TestExtensionBiLoading', $extensions ); + $this->assertArrayHasKey( 'TestSkinBiLoading', $skins ); + $this->assertEquals( 'require_once', $extensions['TestExtensionBiLoading'] ); + $this->assertEquals( 'require_once', $skins['TestSkinBiLoading'] ); } /** diff --git a/tests/phpunit/LoadingTest.php b/tests/phpunit/LoadingTest.php index 785c038..06cea11 100644 --- a/tests/phpunit/LoadingTest.php +++ b/tests/phpunit/LoadingTest.php @@ -80,21 +80,11 @@ $result = array( 'settings' => array( - 'wgUseTestExtensionWfLoadExtension' => true, - 'wgUseTestExtensionBiLoading' => true, - 'wgUseTestExtensionRequireOnce' => true, - 'wgUseTestExtensionComposer' => true, 'wgUseExtensionMediaWikiFarm' => true, - 'wgUseExtensionTestExtensionWfLoadExtension' => true, 'wgUseExtensionTestExtensionBiLoading' => true, 'wgUseExtensionTestExtensionRequireOnce' => true, 'wgUseExtensionTestExtensionComposer' => true, - - 'wgUseTestSkinWfLoadSkin' => true, - 'wgUseTestSkinBiLoading' => true, - 'wgUseTestSkinRequireOnce' => true, - 'wgUseTestSkinComposer' => true, 'wgUseSkinTestSkinWfLoadSkin' => true, 'wgUseSkinTestSkinBiLoading' => true, diff --git a/tests/phpunit/data/config/extensionssettings.php b/tests/phpunit/data/config/extensionssettings.php index c478294..dd259b6 100644 --- a/tests/phpunit/data/config/extensionssettings.php +++ b/tests/phpunit/data/config/extensionssettings.php @@ -6,6 +6,7 @@ ), 'wgUseTestExtensionBiLoading' => array( 'atestextensionsfarm' => true, + 'dtestextensionsfarm' => 'require_once', ), 'wgUseTestExtensionRequireOnce' => array( 'atestextensionsfarm' => true, @@ -18,6 +19,7 @@ ), 'wgUseTestSkinBiLoading' => array( 'atestextensionsfarm' => true, + 'dtestextensionsfarm' => 'require_once', ), 'wgUseTestSkinRequireOnce' => array( 'atestextensionsfarm' => true, @@ -33,6 +35,9 @@ 'wgUseExtensionTestExtensionWfLoadExtension' => array( 'btestextensionsfarm' => true, ), + 'wgUseExtensionTestExtensionBiLoading' => array( + 'ctestextensionsfarm' => 'require_once', + ), 'wgUseSkinTestSkinWfLoadSkin' => array( 'btestextensionsfarm' => true, ), diff --git a/tests/phpunit/data/config/testextensionsfarmversions.php b/tests/phpunit/data/config/testextensionsfarmversions.php index 65b08c3..38160b8 100644 --- a/tests/phpunit/data/config/testextensionsfarmversions.php +++ b/tests/phpunit/data/config/testextensionsfarmversions.php @@ -3,4 +3,6 @@ return array( 'atestextensionsfarm' => 'vstub', 'btestextensionsfarm' => 'vstub', + 'ctestextensionsfarm' => 'vstub', + 'dtestextensionsfarm' => 'vstub', ); -- To view, visit https://gerrit.wikimedia.org/r/321187 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib7dde20a0b780d9e80a788e4000916971e3a08b3 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/MediaWikiFarm Gerrit-Branch: master Gerrit-Owner: Seb35 <seb35wikipe...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits