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

Reply via email to