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

Reply via email to