From: Max Semenik Date: Thu, 19 May 2016 00:40:56 +0000 (-0700) Subject: Change the way installer overrides work X-Git-Tag: 1.31.0-rc.0~6670 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22statistiques_visites%22%2C%22%22%29%20.%20%22?a=commitdiff_plain;h=d1effacdb1b8fdba8757276d85eb63593c01fd57;p=lhc%2Fweb%2Fwiklou.git 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 --- diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index e644ae4011..3aa5d7cce8 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -536,6 +536,8 @@ changes to languages because of Phabricator reports. * 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 27da2ca050..f40cc89434 100644 --- a/autoload.php +++ b/autoload.php @@ -603,7 +603,7 @@ $wgAutoloadLocalClasses = [ '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', @@ -936,7 +936,6 @@ $wgAutoloadLocalClasses = [ '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 ae1a2a72fc..7c161ca77a 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -2,6 +2,9 @@ /** * 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 * the Free Software Foundation; either version 2 of the License, or diff --git a/includes/installer/InstallerOverrides.php b/includes/installer/InstallerOverrides.php new file mode 100644 index 0000000000..eba3a20d6c --- /dev/null +++ b/includes/installer/InstallerOverrides.php @@ -0,0 +1,76 @@ + 'LocalSettingsGenerator', + 'WebInstaller' => 'WebInstaller', + 'CliInstaller' => 'CliInstaller', + ]; + 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 ) { + $className = self::getOverrides()['LocalSettingsGenerator']; + return new $className( $installer ); + } + + /** + * Instantiates and returns an instance of WebInstaller or its descendant classes + * @param WebRequest $request + * @return WebInstaller + */ + public static function getWebInstaller( WebRequest $request ) { + $className = self::getOverrides()['WebInstaller']; + return new $className( $request ); + } + + /** + * Instantiates and returns an instance of CliInstaller or its descendant classes + * @param string $siteName + * @param string|null $admin + * @param array $options + * @return CliInstaller + */ + public static function getCliInstaller( $siteName, $admin = null, array $options = [] ) { + $className = self::getOverrides()['CliInstaller']; + return new $className( $siteName, $admin, $options ); + } +} diff --git a/mw-config/overrides.php b/mw-config/overrides.php deleted file mode 100644 index 3dfecaa7b3..0000000000 --- a/mw-config/overrides.php +++ /dev/null @@ -1,81 +0,0 @@ -values['wgDefaultSkin'] = 'vector'; - // add a new setting - $ls = parent::getText(); - return $ls . "\n\$wgUseTex = true;\n"; - } -} -*/ - -/** - * @since 1.20 - */ -class InstallerOverrides { - /** - * 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 ); - } - - /** - * Instantiates and returns an instance of WebInstaller or its descendant classes - * @param WebRequest $request - * @return WebInstaller - */ - public static function getWebInstaller( WebRequest $request ) { - return new WebInstaller( $request ); - } - - /** - * Instantiates and returns an instance of CliInstaller or its descendant classes - * @param string $siteName - * @param string|null $admin - * @param array $options - * @return CliInstaller - */ - public static function getCliInstaller( $siteName, $admin = null, array $options = [] ) { - return new CliInstaller( $siteName, $admin, $options ); - } -} diff --git a/mw-config/overrides/README b/mw-config/overrides/README new file mode 100644 index 0000000000..f2513301f8 --- /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"; + } +}