jenkins-bot has submitted this change and it was merged.

Change subject: Load extensions using wfLoadExtensions() if possible
......................................................................


Load extensions using wfLoadExtensions() if possible

Bug: T86359
Change-Id: I2e31fd2609de0c7a7c67f8eb1bd6086a90728d4d
---
M mediawiki/conf.d/50_mw_ext_loader.php
M tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
2 files changed, 52 insertions(+), 8 deletions(-)

Approvals:
  BryanDavis: Looks good to me, approved
  Krinkle: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/mediawiki/conf.d/50_mw_ext_loader.php 
b/mediawiki/conf.d/50_mw_ext_loader.php
index b5c6abc..d58c271 100644
--- a/mediawiki/conf.d/50_mw_ext_loader.php
+++ b/mediawiki/conf.d/50_mw_ext_loader.php
@@ -8,7 +8,9 @@
 #   (Foobar).
 # - a scan of the directory /extensions/
 #
-# It will then load the default entry point: /Foo/Foo.php
+# It will then load the extension by either:
+# - If an extension.json file is present, wfLoadExtension()
+# - require the default entry point, Foo/Foo.php
 
 $func_get_exts = function () {
        global $IP;
@@ -33,7 +35,10 @@
                $currentExt = $m[1][0];
        }
 
-       $ext_to_load = array();
+       $ext_to_load = array(
+               'require' => array(),
+               'load' => array(),
+       );
        $ext_missing = array();
        $ext_candidates = array();
 
@@ -67,11 +72,13 @@
                        continue;
                }
 
-               $extfile = "{$IP}/extensions/{$extname}/{$extname}.php";
-               if( file_exists( $extfile ) ) {
-                       $ext_to_load[$extname] = $extfile;
+               $ext_dir = "{$IP}/extensions/{$extname}";
+               if ( file_exists( "{$ext_dir}/extension.json" ) && 
function_exists( 'wfLoadExtensions' ) ) {
+                       $ext_to_load['load'][] = $extname;
+               } elseif ( file_exists( "{$ext_dir}/$extname.php" ) ) {
+                       $ext_to_load['require'][] = "{$ext_dir}/$extname.php";
                } else {
-                       $ext_missing[] = $extfile;
+                       $ext_missing[] = $extname;
                }
        }
        if ( count( $ext_missing ) ) {
@@ -85,6 +92,11 @@
        return $ext_to_load;
 };
 
-foreach ( $func_get_exts() as $extname ) {
-       require_once $extname;
+$extensions = $func_get_exts();
+if ( $extensions['load'] ) {
+       wfLoadExtensions( $extensions['load'] );
+}
+
+foreach ( $extensions['require'] as $entrypoint ) {
+       require_once $entrypoint;
 }
diff --git a/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php 
b/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
index cafaf0e..753db1d 100644
--- a/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
+++ b/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
@@ -15,7 +15,16 @@
                unlink( $tmpName );
                mkdir( $tmpName . "/extensions", 0777, /* recursive: */ true );
                $this->tmpName = $tmpName;
+       }
 
+       static function setUpBeforeClass() {
+               // Stub wfLoadExtensions()
+               function wfLoadExtensions( array $names ) {
+                       global $fakeExtensions;
+                       foreach ( $names as $name ) {
+                               $fakeExtensions[$name] = true;
+                       }
+               }
        }
 
        /**
@@ -60,6 +69,13 @@
 global \$fakeExtensions;
 \$fakeExtensions['$name'] = true;
 ");
+       }
+
+       protected function fakeRegistrationExtension( $name ) {
+               $dir = $this->tmpName . "/extensions/$name";
+               mkdir( $dir, 0777, /** recursive: */ true );
+               $fileHandle = fopen( $dir . '/extension.json', 'w+' );
+               fwrite( $fileHandle, '{}');
        }
 
        protected function createLoadFile( Array $extensions ) {
@@ -145,6 +161,22 @@
                $this->assertLoaded( 'SecondExt' );
        }
 
+       function testLoadRegistrationExtensions() {
+               $this->fakeRegistrationExtension( 'RegExt1' );
+               $this->fakeRegistrationExtension( 'RegExt2' );
+               $this->runLoader();
+               $this->assertLoaded( 'RegExt1' );
+               $this->assertLoaded( 'RegExt2' );
+       }
+
+       function testLoadMixed() {
+               $this->fakeRegistrationExtension( 'RegExt1' );
+               $this->fakeExtension( 'OldExt2' );
+               $this->runLoader();
+               $this->assertLoaded( 'RegExt1' );
+               $this->assertLoaded( 'OldExt2' );
+       }
+
        function testLoadFromFileWithGerritNames() {
                $this->fakeExtension( 'Must_not_be_loaded' );
                $this->fakeExtension( 'BaseName' );

-- 
To view, visit https://gerrit.wikimedia.org/r/184003
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2e31fd2609de0c7a7c67f8eb1bd6086a90728d4d
Gerrit-PatchSet: 5
Gerrit-Project: integration/jenkins
Gerrit-Branch: master
Gerrit-Owner: Legoktm <[email protected]>
Gerrit-Reviewer: BryanDavis <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to