From 222b01f5169f1c7e69762e0e8904c24f78f71882 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 28 Jul 2010 11:52:48 +0200 Subject: update to MediaWiki 1.16.0 --- maintenance/populateCategory.php | 128 ++++++++++++++++++++++++++++++--------- 1 file changed, 101 insertions(+), 27 deletions(-) (limited to 'maintenance/populateCategory.php') diff --git a/maintenance/populateCategory.php b/maintenance/populateCategory.php index 1dca7b74..bf84bb0a 100644 --- a/maintenance/populateCategory.php +++ b/maintenance/populateCategory.php @@ -7,11 +7,16 @@ $optionsWithArgs = array( 'begin', 'max-slave-lag', 'throttle' ); -require_once "commandLine.inc"; -require_once "populateCategory.inc"; +require_once( dirname(__FILE__) . '/Maintenance.php' ); -if( isset( $options['help'] ) ) { - echo <<mDescription = <<] [--begin ] -[--throttle ] [--force] - - --begin: Only do categories whose names are alphabetically after the pro- -vided name. Default: empty (start from beginning). - --max-slave-lag: If slave lag exceeds this many seconds, wait until it -drops before continuing. Default: 10. - --throttle: Wait this many milliseconds after each category. Default: 0. - --force: Run regardless of whether the database says it's been run already. - TEXT; - exit( 0 ); -} + $this->addOption( 'begin', 'Only do categories whose names are alphabetically after the provided name', false, true ); + $this->addOption( 'max-slave-lag', 'If slave lag exceeds this many seconds, wait until it drops before continuing. Default: 10', false, true ); + $this->addOption( 'throttle', 'Wait this many milliseconds after each category. Default: 0', false, true ); + $this->addOption( 'force', 'Run regardless of whether the database says it\'s been run already' ); + } + + public function execute() { + $begin = $this->getOption( 'begin', '' ); + $maxSlaveLag = $this->getOption( 'max-slave-lag', 10 ); + $throttle = $this->getOption( 'throttle', 0 ); + $force = $this->getOption( 'force', false ); + $this->doPopulateCategory( $begin, $maxSlaveLag, $throttle, $force ); + } -$defaults = array( - 'begin' => '', - 'max-slave-lag' => 10, - 'throttle' => 0, - 'force' => false -); -$options = array_merge( $defaults, $options ); + private function doPopulateCategory( $begin, $maxlag, $throttle, $force ) { + $dbw = wfGetDB( DB_MASTER ); + + if( !$force ) { + $row = $dbw->selectRow( + 'updatelog', + '1', + array( 'ul_key' => 'populate category' ), + __FUNCTION__ + ); + if( $row ) { + $this->output( "Category table already populated. Use php ". + "maintenance/populateCategory.php\n--force from the command line ". + "to override.\n" ); + return true; + } + } + + $maxlag = intval( $maxlag ); + $throttle = intval( $throttle ); + $force = (bool)$force; + if( $begin !== '' ) { + $where = 'cl_to > '.$dbw->addQuotes( $begin ); + } else { + $where = null; + } + $i = 0; + + while( true ) { + # Find which category to update + $row = $dbw->selectRow( + 'categorylinks', + 'cl_to', + $where, + __FUNCTION__, + array( + 'ORDER BY' => 'cl_to' + ) + ); + if( !$row ) { + # Done, hopefully. + break; + } + $name = $row->cl_to; + $where = 'cl_to > '.$dbw->addQuotes( $name ); + + # Use the row to update the category count + $cat = Category::newFromName( $name ); + if( !is_object( $cat ) ) { + $this->output( "The category named $name is not valid?!\n" ); + } else { + $cat->refreshCounts(); + } + + ++$i; + if( !($i % self::REPORTING_INTERVAL) ) { + $this->output( "$name\n" ); + wfWaitForSlaves( $maxlag ); + } + usleep( $throttle*1000 ); + } + + if( $dbw->insert( + 'updatelog', + array( 'ul_key' => 'populate category' ), + __FUNCTION__, + 'IGNORE' + ) + ) { + wfOut( "Category population complete.\n" ); + return true; + } else { + wfOut( "Could not insert category population row.\n" ); + return false; + } + } +} -populateCategory( $options['begin'], $options['max-slave-lag'], - $options['throttle'], $options['force'] ); +$maintClass = "PopulateCategory"; +require_once( DO_MAINTENANCE ); -- cgit v1.2.2