diff options
Diffstat (limited to 'maintenance/renamewiki.php')
-rw-r--r-- | maintenance/renamewiki.php | 115 |
1 files changed, 71 insertions, 44 deletions
diff --git a/maintenance/renamewiki.php b/maintenance/renamewiki.php index 66de326b..36437bea 100644 --- a/maintenance/renamewiki.php +++ b/maintenance/renamewiki.php @@ -3,60 +3,87 @@ * Why yes, this *is* another special-purpose Wikimedia maintenance script! * Should be fixed up and generalized. * + * 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 * @ingroup Maintenance + * @ingroup Wikimedia */ -require_once( "commandLine.inc" ); +require_once( dirname(__FILE__) . '/Maintenance.php' ); -if ( count( $args ) != 2 ) { - wfDie( "Rename external storage dbs and leave a new one...\n" . - "Usage: php renamewiki.php <olddb> <newdb>\n" ); -} +class RenameWiki extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Rename external storage dbs and leave a new one"; + $this->addArg( 'olddb', 'Old DB name' ); + $this->addArg( 'newdb', 'New DB name' ); + } + + public function getDbType() { + return Maintenance::DB_ADMIN; + } -list( $from, $to ) = $args; + public function execute() { + global $wgDefaultExternalStore; -echo "Renaming blob tables in ES from $from to $to...\n"; -echo "Sleeping 5 seconds..."; -sleep(5); -echo "\n"; + # Setup + $from = $this->getArg( 0 ); + $to = $this->getArg( 1 ); + $this->output( "Renaming blob tables in ES from $from to $to...\n" ); + $this->output( "Sleeping 5 seconds...\n" ); + sleep(5); -$maintenance = "$IP/maintenance"; + # Initialise external storage + if ( is_array( $wgDefaultExternalStore ) ) { + $stores = $wgDefaultExternalStore; + } elseif ( $wgDefaultExternalStore ) { + $stores = array( $wgDefaultExternalStore ); + } else { + $stores = array(); + } -# Initialise external storage -if ( is_array( $wgDefaultExternalStore ) ) { - $stores = $wgDefaultExternalStore; -} elseif ( $wgDefaultExternalStore ) { - $stores = array( $wgDefaultExternalStore ); -} else { - $stores = array(); -} -if ( count( $stores ) ) { - require_once( 'ExternalStoreDB.php' ); - print "Initialising external storage $store...\n"; - global $wgDBuser, $wgDBpassword, $wgExternalServers; - foreach ( $stores as $storeURL ) { - $m = array(); - if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) { - continue; + if ( count( $stores ) ) { + $this->output( "Initialising external storage $store...\n" ); + global $wgDBuser, $wgDBpassword, $wgExternalServers; + foreach ( $stores as $storeURL ) { + $m = array(); + if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) { + continue; + } + + $cluster = $m[1]; + + # Hack + $wgExternalServers[$cluster][0]['user'] = $wgDBuser; + $wgExternalServers[$cluster][0]['password'] = $wgDBpassword; + + $store = new ExternalStoreDB; + $extdb =& $store->getMaster( $cluster ); + $extdb->query( "SET table_type=InnoDB" ); + $extdb->query( "CREATE DATABASE {$to}" ); + $extdb->query( "ALTER TABLE {$from}.blobs RENAME TO {$to}.blobs" ); + $extdb->selectDB( $from ); + $extdb->sourceFile( $this->getDir() . '/storage/blobs.sql' ); + $extdb->commit(); + } } - - $cluster = $m[1]; - - # Hack - $wgExternalServers[$cluster][0]['user'] = $wgDBuser; - $wgExternalServers[$cluster][0]['password'] = $wgDBpassword; - - $store = new ExternalStoreDB; - $extdb =& $store->getMaster( $cluster ); - $extdb->query( "SET table_type=InnoDB" ); - $extdb->query( "CREATE DATABASE {$to}" ); - $extdb->query( "ALTER TABLE {$from}.blobs RENAME TO {$to}.blobs" ); - $extdb->selectDB( $from ); - dbsource( "$maintenance/storage/blobs.sql", $extdb ); - $extdb->immediateCommit(); + $this->output( "done.\n" ); } } -echo "done.\n"; - +$maintClass = "RenameWiki"; +require_once( DO_MAINTENANCE ); |