MaxSem has uploaded a new change for review. https://gerrit.wikimedia.org/r/289581
Change subject: Change the way installer overrides work ...................................................................... Change the way installer overrides work Instead of "don't edit this file, edit that file", do it settings.d style where packagers can drop their stuff in mw-config/overrides. I propose to backport it to 1.27 because LTS. Bug: T135695 Change-Id: I2661ba2036b2887d31ab356751d731cc8b499f26 --- M RELEASE-NOTES-1.27 M autoload.php M includes/installer/Installer.php R includes/installer/InstallerOverrides.php A mw-config/overrides/README 5 files changed, 53 insertions(+), 32 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/81/289581/1 diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index 7c50e4f..5f2d4e7 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -536,6 +536,8 @@ * User::isPasswordReminderThrottled() was deprecated. * Bot-oriented parameters to Special:UserLogin (wpCookieCheck, wpSkipCookieCheck) were removed. +* Installer can now be customized without patching MediaWiki code, see + mw-config/overrides/README for details. == Compatibility == diff --git a/autoload.php b/autoload.php index aeb69fd..624fca4 100644 --- a/autoload.php +++ b/autoload.php @@ -601,7 +601,7 @@ 'InitSiteStats' => __DIR__ . '/maintenance/initSiteStats.php', 'InstallDocFormatter' => __DIR__ . '/includes/installer/InstallDocFormatter.php', 'Installer' => __DIR__ . '/includes/installer/Installer.php', - 'InstallerOverrides' => __DIR__ . '/mw-config/overrides.php', + 'InstallerOverrides' => __DIR__ . '/includes/installer/InstallerOverrides.php', 'InstallerSessionProvider' => __DIR__ . '/includes/installer/InstallerSessionProvider.php', 'Interwiki' => __DIR__ . '/includes/interwiki/Interwiki.php', 'InvalidPassword' => __DIR__ . '/includes/password/InvalidPassword.php', @@ -930,7 +930,6 @@ 'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php', 'MutableContext' => __DIR__ . '/includes/context/MutableContext.php', 'MwSql' => __DIR__ . '/maintenance/sql.php', - 'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php', 'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php', 'MySQLMasterPos' => __DIR__ . '/includes/db/DatabaseMysqlBase.php', 'MySqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php', diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 85b1013..bdecda6 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -1,6 +1,9 @@ <?php /** * Base code for MediaWiki installer. + * + * DO NOT PATCH THIS FILE IF YOU NEED TO CHANGE INSTALLER BEHAVIOR IN YOUR PACKAGE! + * See mw-config/overrides/README for details. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/mw-config/overrides.php b/includes/installer/InstallerOverrides.php similarity index 63% rename from mw-config/overrides.php rename to includes/installer/InstallerOverrides.php index 3dfecaa..c7227e5 100644 --- a/mw-config/overrides.php +++ b/includes/installer/InstallerOverrides.php @@ -1,11 +1,6 @@ <?php /** - * MediaWiki installer overrides. - * Modify this file if you are a packager who needs to modify the behavior of - * the MediaWiki installer. Altering it is preferred over changing anything in - * /includes. - * - * Note: this file doesn't gets included from a global scope, don't use globals directly. + * MediaWiki installer overrides. See mw-config/overrides/README for details. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,38 +20,36 @@ * @file */ -/* - -Example of modifications: - - public static function getLocalSettingsGenerator( Installer $installer ) { - return new MyLocalSettingsGenerator( $installer ); - } - -Then add the following to the bottom of this file: - -class MyLocalSettingsGenerator extends LocalSettingsGenerator { - function getText() { - // Modify an existing setting - $this->values['wgDefaultSkin'] = 'vector'; - // add a new setting - $ls = parent::getText(); - return $ls . "\n\$wgUseTex = true;\n"; - } -} -*/ - /** * @since 1.20 */ class InstallerOverrides { + private static function getOverrides() { + global $IP; + static $overrides; + + if ( !$overrides ) { + $overrides = [ + 'LocalSettingsGenerator' => 'LocalSettingsGenerator', + 'WebInstaller' => 'WebInstaller', + 'getCliInstaller' => 'getCliInstaller', + ]; + foreach ( glob( "$IP/mw-config/overrides/*.php" ) as $file ) { + require $file; + } + } + + return $overrides; + } + /** * Instantiates and returns an instance of LocalSettingsGenerator or its descendant classes * @param Installer $installer * @return LocalSettingsGenerator */ public static function getLocalSettingsGenerator( Installer $installer ) { - return new LocalSettingsGenerator( $installer ); + $className = self::getOverrides()['LocalSettingsGenerator']; + return new $className( $installer ); } /** @@ -65,7 +58,8 @@ * @return WebInstaller */ public static function getWebInstaller( WebRequest $request ) { - return new WebInstaller( $request ); + $className = self::getOverrides()['WebInstaller']; + return new $className( $request ); } /** @@ -76,6 +70,7 @@ * @return CliInstaller */ public static function getCliInstaller( $siteName, $admin = null, array $options = [] ) { - return new CliInstaller( $siteName, $admin, $options ); + $className = self::getOverrides()['CliInstaller']; + return new $className( $siteName, $admin, $options ); } } diff --git a/mw-config/overrides/README b/mw-config/overrides/README new file mode 100644 index 0000000..f251330 --- /dev/null +++ b/mw-config/overrides/README @@ -0,0 +1,22 @@ +Don't modify the installer if you want to alter its behavior, including +the contents of generated LocalSettings.php in your package. Instead, +you can override classes used by the installer. + +You can override 3 classes: +* LocalSettingsGenerator - generates LocalSettings.php +* WebInstaller - web instller UI +* CliInstaller - command line installer + +Example override: + +$overrides['LocalSettingsGenerator'] = 'MyLocalSettingsGenerator'; + +class MyLocalSettingsGenerator extends LocalSettingsGenerator { + function getText() { + // Modify an existing setting + $this->values['wgDefaultSkin'] = 'vector'; + // add a new setting + $ls = parent::getText(); + return $ls . "\n\$wgMiserMode = true;\n"; + } +} -- To view, visit https://gerrit.wikimedia.org/r/289581 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2661ba2036b2887d31ab356751d731cc8b499f26 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: MaxSem <maxsem.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits