X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2Fupdate.php;h=877f1366a33bd6a3f278a05cd31d25b5e49d0917;hb=51491c785b688a63949d0500703e38b95700d948;hp=1443a6d82194e683384a40277dbfc2296fa8f1b4;hpb=670602f082c006326eee311d6e3ab6033d9bcdf9;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/update.php b/maintenance/update.php index 1443a6d821..877f1366a3 100644 --- a/maintenance/update.php +++ b/maintenance/update.php @@ -5,20 +5,40 @@ * This is used when the database schema is modified and we need to apply patches. * It is kept compatible with php 4 parsing so that it can give out a meaningful error. * + * 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @todo document * @ingroup Maintenance */ -if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.1.0' ) < 0 ) ) { - echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.1.0 or higher. ABORTING.\n" . +if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) { + echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" . "Check if you have a newer php executable with a different name, such as php5.\n"; die( 1 ); } $wgUseMasterForMaintenance = true; -require_once( dirname( __FILE__ ) . '/Maintenance.php' ); +require_once( __DIR__ . '/Maintenance.php' ); +/** + * Maintenance script to run database schema updates. + * + * @ingroup Maintenance + */ class UpdateMediaWiki extends Maintenance { function __construct() { @@ -28,6 +48,7 @@ class UpdateMediaWiki extends Maintenance { $this->addOption( 'quick', 'Skip 5 second countdown before starting' ); $this->addOption( 'doshared', 'Also update shared tables' ); $this->addOption( 'nopurge', 'Do not purge the objectcache table after updates' ); + $this->addOption( 'force', 'Override when $wgAllowSchemaUpdates disables this script' ); } function getDbType() { @@ -35,10 +56,10 @@ class UpdateMediaWiki extends Maintenance { return 2 /* Maintenance::DB_ADMIN */; } - private function compatChecks() { + function compatChecks() { $test = new PhpXmlBugTester(); if ( !$test->ok ) { - $this->error( + $this->error( "Your system has a combination of PHP and libxml2 versions which is buggy\n" . "and can cause hidden data corruption in MediaWiki and other web apps.\n" . "Upgrade to PHP 5.2.9 or later and libxml2 2.7.3 or later!\n" . @@ -60,13 +81,21 @@ class UpdateMediaWiki extends Maintenance { } function execute() { - global $wgVersion, $wgTitle, $wgLang; + global $wgVersion, $wgTitle, $wgLang, $wgAllowSchemaUpdates; + + if( !$wgAllowSchemaUpdates && !$this->hasOption( 'force' ) ) { + $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n" + . "probably ask for some help in performing your schema updates.\n\n" + . "If you know what you are doing, you can continue with --force", true ); + } $wgLang = Language::factory( 'en' ); $wgTitle = Title::newFromText( "MediaWiki database updater" ); $this->output( "MediaWiki {$wgVersion} Updater\n\n" ); + wfWaitForSlaves( 5 ); // let's not kill databases, shall we? ;) --tor + if ( !$this->hasOption( 'skip-compat-checks' ) ) { $this->compatChecks(); } else { @@ -87,14 +116,22 @@ class UpdateMediaWiki extends Maintenance { } $shared = $this->hasOption( 'doshared' ); - $purge = !$this->hasOption( 'nopurge' ); + + $updates = array( 'core', 'extensions', 'stats' ); + if( !$this->hasOption('nopurge') ) { + $updates[] = 'purge'; + } $updater = DatabaseUpdater::newForDb( $db, $shared, $this ); - $updater->doUpdates( $purge ); + $updater->doUpdates( $updates ); foreach( $updater->getPostDatabaseUpdateMaintenance() as $maint ) { + if ( $updater->updateRowExists( $maint ) ) { + continue; + } $child = $this->runChild( $maint ); $child->execute(); + $updater->insertUpdateRow( $maint ); } $this->output( "\nDone.\n" ); @@ -116,4 +153,4 @@ class UpdateMediaWiki extends Maintenance { } $maintClass = 'UpdateMediaWiki'; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN );