* Add --wikiroot option to CLI installer so the user can give something besides ...
authorMark A. Hershberger <mah@users.mediawiki.org>
Sun, 19 Dec 2010 04:55:00 +0000 (04:55 +0000)
committerMark A. Hershberger <mah@users.mediawiki.org>
Sun, 19 Dec 2010 04:55:00 +0000 (04:55 +0000)
* Add --upgrade option to CLI installer so we can throw an error when LocalSettings.php is present and provide an upgrade route to the user.
* Fixup CLI's showStatusMessage so allow CLI to throw an error and quit

includes/installer/CliInstaller.php
includes/installer/Installer.i18n.php
maintenance/install.php

index fc71c0c..3bc45b9 100644 (file)
@@ -32,6 +32,10 @@ class CliInstaller extends CoreInstaller {
                'dbts2schema' => 'wgDBts2schema',
                'dbpath' => 'wgSQLiteDataDir',
                'scriptpath' => 'wgScriptPath',
+               'wikiroot' => 'wgScriptPath',
+               'upgrade' => 'cliUpgrade', /* As long as it isn't $confItems
+                                                                       * in LocalSettingsGenerator, we
+                                                                       * should be fine. */
        );
 
        /**
@@ -81,6 +85,15 @@ class CliInstaller extends CoreInstaller {
         * Main entry point.
         */
        public function execute() {
+               global $cliUpgrade;
+
+               $vars = $this->getExistingLocalSettings();
+               if( $vars && ( !isset( $cliUpgrade ) || $cliUpgrade !== "yes" )  ) {
+                       $this->showStatusMessage(
+                               Status::newFatal( "config-localsettings-cli-upgrade" )
+                       );
+               }
+
                $this->performInstallation(
                        array( $this, 'startStage' ),
                        array( $this, 'endStage' )
@@ -103,32 +116,37 @@ class CliInstaller extends CoreInstaller {
        }
 
        public function endStage( $step, $status ) {
-               $warnings = $status->getWarningsArray();
-
-               if ( !$status->isOk() ) {
-                       $this->showStatusMessage( $status );
-                       echo "\n";
-                       exit;
-               } elseif ( count( $warnings ) !== 0 ) {
-                       foreach ( $status->getWikiTextArray( $warnings ) as $w ) {
-                               $this->showMessage( $w . wfMsg( 'ellipsis' ) .
-                                       wfMsg( 'word-separator' ) );
-                       }
-               }
-
+               $this->showStatusMessage( $status );
                $this->showMessage( wfMsg( 'config-install-step-done' ) . "\n" );
        }
 
        public function showMessage( $msg /*, ... */ ) {
                $params = func_get_args();
                array_shift( $params );
-               $text = wfMsgExt( $msg, array( 'parseinline' ), $params );
+
+               /* parseinline has the nasty side-effect of putting encoded
+                * angle brackets, around the message, so the substr removes
+                * them. */
+               $text = substr( wfMsgExt( $msg, array( 'parseinline' ), $params ), 4, -4 );
                $text = preg_replace( '/<a href="(.*?)".*?>(.*?)<\/a>/', '$2 &lt;$1&gt;', $text );
                echo html_entity_decode( strip_tags( $text ), ENT_QUOTES ) . "\n";
                flush();
        }
 
        public function showStatusMessage( Status $status ) {
-               $this->showMessage( $status->getWikiText() );
+               $warnings = array_merge( $status->getWarningsArray(),
+                       $status->getErrorsArray() );
+
+               if ( count( $warnings ) !== 0 ) {
+                       foreach ( $status->getWikiTextArray( $warnings ) as $w ) {
+                               $this->showMessage( $w . wfMsg( 'ellipsis' ) .
+                                       wfMsg( 'word-separator' ) );
+                       }
+               }
+
+               if ( !$status->isOk() ) {
+                       echo "\n";
+                       exit;
+               }
        }
 }
index a1423f5..a6b9e26 100644 (file)
@@ -18,6 +18,8 @@ $messages['en'] = array(
        'config-localsettings-upgrade'    => "A <code>LocalSettings.php</code> file has been detected.
 To upgrade this installation, please enter the value of <code>\$wgUpgradeKey</code> in the box below.
 You will find it in LocalSettings.php.",
+       'config-localsettings-cli-upgrade'    => 'A LocalSettings.php file has been detected.
+To upgrade this installation, please give the --upgrade=yes option.',
        'config-localsettings-key'        => 'Upgrade key:',
        'config-localsettings-badkey'     => 'The key you provided is incorrect.',
        'config-upgrade-key-missing'      => 'An existing installation of MediaWiki has been detected.
index 56e49cf..8834ed3 100644 (file)
@@ -49,10 +49,14 @@ class CommandLineInstaller extends Maintenance {
                $this->addOption( 'dbuser', 'The user to use for normal operations (wikiuser)', false, true );
                $this->addOption( 'dbpass', 'The pasword for the DB user for normal operations', false, true );
                $this->addOption( 'confpath', "Path to write LocalSettings.php to, default $IP", false, true );
+               $this->addOption( 'wikiroot', "The URL to use for the wiki root (/wiki)", false, true );
                /* $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in pg (mediawiki)', false, true ); */
                /* $this->addOption( 'dbtsearch2schema', 'The schema for the tsearch2 DB in pg (public)', false, true ); */
                /* $this->addOption( 'namespace', 'The project namespace (same as the name)', false, true ); */
                $this->addOption( 'env-checks', "Run environment checks only, don't change anything" );
+               $this->addOption( 'upgrade',
+                       'Allow the upgrade to continue despite an existing LocalSettings.php', false, true );
+
        }
 
        public function execute() {