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