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