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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits