Legoktm has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/184003

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, 46 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/integration/jenkins 
refs/changes/03/184003/1

diff --git a/mediawiki/conf.d/50_mw_ext_loader.php 
b/mediawiki/conf.d/50_mw_ext_loader.php
index 35da46b..7a37bfb 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();
 
@@ -64,11 +69,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" ) ) {
+                       $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 ) ) {
@@ -89,6 +96,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 57fdee2..c06de6d 100644
--- a/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
+++ b/tests/mediawiki/conf.d/50_mw_ext_loaderTest.php
@@ -15,14 +15,23 @@
                unlink( $tmpName );
                mkdir( $tmpName . "/extensions", 0777, /* recursive: */ true );
                $this->tmpName = $tmpName;
+       }
 
+       static function setUpClass() {
+               // Stub wfLoadExtensions()
+               function wfLoadExtensions( array $names ) {
+                       global $fakeExtensions;
+                       foreach ( $names as $name ) {
+                               $fakeExtensions[$name] = true;
+                       }
+               }
        }
 
        /**
         * Remove fixture directory and child files/directories
         */
        function tearDown() {
-               $this->wfRecursiveRemoveDir( $this->tmpName );
+               //$this->wfRecursiveRemoveDir( $this->tmpName );
        }
 
        /** Shamelessly copy pasted from MediaWiki  wfRecusriveRemoveDir() */
@@ -60,6 +69,14 @@
 global \$fakeExtensions;
 \$fakeExtensions['$name'] = true;
 ");
+       }
+
+       protected function fakeRegistrationExtension( $name ) {
+               $dir = $this->tmpName . "/extensions/$name";
+               mkdir( $dir, 0777, /** recursive: */ true );
+               var_dump($dir);
+               $fileHandle = fopen( $dir . "/extension.json", 'w+' );
+               fwrite( $fileHandle, '{}');
        }
 
        protected function createLoadFile( Array $extensions ) {
@@ -145,6 +162,14 @@
                $this->assertLoaded( 'SecondExt' );
        }
 
+       function testLoadRegistrationExtensions() {
+               $this->fakeRegistrationExtension( 'RegExt1' );
+               $this->fakeRegistrationExtension( 'RegExt2' );
+               $this->runLoader();
+               $this->assertLoaded( 'RegExt1' );
+               $this->assertLoaded( 'RegExt2' );
+       }
+
        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: newchange
Gerrit-Change-Id: I2e31fd2609de0c7a7c67f8eb1bd6086a90728d4d
Gerrit-PatchSet: 1
Gerrit-Project: integration/jenkins
Gerrit-Branch: master
Gerrit-Owner: 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