From a82c01a4b2e13dcbb0bfb7fef3b089d01420a1cb Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Sun, 9 Aug 2009 15:22:34 +0000 Subject: [PATCH] * Use DB_ADMIN for fixSlaveDesync, rebuildtextindex, updateSearchIndex, patchSql * Duplicate archive() as DatabaseBase::patchPath(), clean up patchSql to use this --- includes/db/Database.php | 17 ++++++++ maintenance/fixSlaveDesync.php | 2 - maintenance/patchSql.php | 69 ++++++++++++++++++++----------- maintenance/rebuildtextindex.php | 4 ++ maintenance/updateSearchIndex.php | 4 ++ 5 files changed, 71 insertions(+), 25 deletions(-) diff --git a/includes/db/Database.php b/includes/db/Database.php index 246b2aff3f..2fdcb49756 100644 --- a/includes/db/Database.php +++ b/includes/db/Database.php @@ -2075,6 +2075,23 @@ abstract class DatabaseBase { return $error; } + /** + * Get the full path of a patch file. Originally based on archive() + * from updaters.inc. Keep in mind this always returns a patch, as + * it fails back to MySQL if no DB-specific patch can be found + * + * @param $patch String The name of the patch, like patch-something.sql + * @return String Full path to patch file + */ + public static function patchPatch( $patch ) { + global $wgDBtype, $IP; + if ( file_exists( "$IP/maintenance/$wgDBtype/archives/$name" ) ) { + return "$IP/maintenance/$wgDBtype/archives/$name"; + } else { + return "$IP/maintenance/archives/$name"; + } + } + /** * Read and execute commands from an open file handle * Returns true on success, error string or exception on failure (depending on object's error ignore settings) diff --git a/maintenance/fixSlaveDesync.php b/maintenance/fixSlaveDesync.php index 47fb2c47ee..e7fecc8fe2 100644 --- a/maintenance/fixSlaveDesync.php +++ b/maintenance/fixSlaveDesync.php @@ -32,8 +32,6 @@ class FixSlaveDesync extends Maintenance { public function execute() { global $slaveIndexes, $wgDBservers; - - $slaveIndexes = array(); for ( $i = 1; $i < count( $wgDBservers ); $i++ ) { if ( wfGetLB()->isNonZeroLoad( $i ) ) { diff --git a/maintenance/patchSql.php b/maintenance/patchSql.php index 8fbe58abd6..18835a47d2 100644 --- a/maintenance/patchSql.php +++ b/maintenance/patchSql.php @@ -3,34 +3,57 @@ * Manually run an SQL patch outside of the general updaters. * This ensures that the DB options (charset, prefix, engine) are correctly set. * - * @file + * 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 + * * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/commandLine.inc' ); -require_once "$IP/maintenance/updaters.inc"; +require_once( dirname(__FILE__) . '/Maintenance.php' ); + +class PatchSql extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Run an SQL file into the DB, replacing prefix and charset vars"; + $this->addArgs( array( 'patch-name' ) ); + } + + protected function getDbType() { + return Maintenance::DB_ADMIN; + } -if( $args ) { - foreach( $args as $arg ) { - $files = array( - $arg, - archive( $arg ), - archive( "patch-$arg.sql" ), - ); - foreach( $files as $file ) { - if( file_exists( $file ) ) { - echo "$file ...\n"; - wfGetDB( DB_MASTER )->fileSource( $file ); - continue 2; + public function execute() { + $dbw = wfGetDB( DB_MASTER ); + foreach( $this->mArgs as $arg ) { + $files = array( + $arg, + DatabaseBase::patchPatch( $arg ), + DatabaseBase::patchPatch( "patch-$arg.sql" ), + ); + foreach( $files as $file ) { + if( file_exists( $file ) ) { + $this->output( "$file ...\n" ); + $dbw->fileSource( $file ); + continue 2; + } } + $this->error( "Could not find $arg\n" ); } - echo "Could not find $arg\n"; + $this->output( "done.\n" ); } - echo "done.\n"; -} else { - echo "Run an SQL file into the DB, replacing prefix and charset vars.\n"; - echo "Usage:\n"; - echo " php maintenance/patchSql.php file1.sql file2.sql ...\n"; - echo "\n"; - echo "Paths in maintenance/archive are automatically expanded if a local file isn't found.\n"; } + +$maintClass = "PatchSql"; +require_once( DO_MAINTENANCE ); diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php index 64b80aa095..e0eb4c405e 100644 --- a/maintenance/rebuildtextindex.php +++ b/maintenance/rebuildtextindex.php @@ -36,6 +36,10 @@ class RebuildTextIndex extends Maintenance { $this->mDescription = "Rebuild search index table from scratch"; } + protected function getDbType() { + return Maintenance::DB_ADMIN; + } + public function execute() { global $wgTitle; diff --git a/maintenance/updateSearchIndex.php b/maintenance/updateSearchIndex.php index e804dfdfad..6172fa4dd8 100644 --- a/maintenance/updateSearchIndex.php +++ b/maintenance/updateSearchIndex.php @@ -40,6 +40,10 @@ class UpdateSearchIndex extends Maintenance { $this->addOption( 'l', 'How long the searchindex and revision tables will be locked for', false, true ); } + protected function getDbType() { + return Maintenance::DB_ADMIN; + } + public function execute() { $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiId() . '.pos' ); $end = $this->getOption( 'e', wfTimestampNow() ); -- 2.20.1