http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100107

Revision: 100107
Author:   aaron
Date:     2011-10-18 04:05:04 +0000 (Tue, 18 Oct 2011)
Log Message:
-----------
Migrated html cache purge script to use Maintenance class

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php

Removed Paths:
-------------
    trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc

Deleted: trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc
===================================================================
--- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc   
2011-10-18 03:21:37 UTC (rev 100106)
+++ trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.inc   
2011-10-18 04:05:04 UTC (rev 100107)
@@ -1,77 +0,0 @@
-<?php
-
-function list_reviewable_pages( $db, $fileHandle ) {
-       global $wgFlaggedRevsNamespaces, $wgUseSquid, $wgUseFileCache;
-       echo "Building list of all reviewable pages to purge ...\n";
-       if ( !$wgUseSquid && !$wgUseFileCache ) {
-               echo "Squid/file cache not enabled ... nothing to purge.\n";
-               return;
-       } elseif ( empty( $wgFlaggedRevsNamespaces ) ) {
-               echo "There are no reviewable namespaces ... nothing to 
purge.\n";
-               return;
-       }
-       $BATCH_SIZE = 1000;
-       $start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ 
);
-       $end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ );
-       if ( is_null( $start ) || is_null( $end ) ) {
-               echo "... page table seems to be empty.\n";
-               return;
-       }
-       # Do remaining chunk
-       $end += $BATCH_SIZE - 1;
-       $blockStart = $start;
-       $blockEnd = $start + $BATCH_SIZE - 1;
-       $count = 0;
-       while ( $blockEnd <= $end ) {
-               echo "... doing page_id from $blockStart to $blockEnd\n";
-               $res = $db->select( 'page', '*', 
-                       array(
-                               "page_id BETWEEN $blockStart AND $blockEnd",
-                               'page_namespace' => $wgFlaggedRevsNamespaces ),
-                       __FUNCTION__
-               );
-               # Go through and append each purgeable page...
-               foreach ( $res as $row ) {
-                       $title = Title::newFromRow( $row );
-                       $fa = FlaggableWikiPage::getTitleInstance( $title );
-                       if ( $fa->isReviewable() ) {
-                               # Need to purge this page - add to list
-                               fwrite( $fileHandle, $title->getPrefixedDBKey() 
. "\n" );
-                               $count++;
-                       }
-               }
-               $db->freeResult( $res );
-               $blockStart += $BATCH_SIZE - 1;
-               $blockEnd += $BATCH_SIZE - 1;
-               wfWaitForSlaves( 5 ); // not really needed
-       }
-       echo "List of reviewable pages to purge complete ... {$count} pages\n";
-}
-
-function purge_reviewable_pages( $db, $fileHandle ) {
-       global $wgUseSquid, $wgUseFileCache;
-       echo "Purging squid cache for list of pages to purge ...\n";
-       if ( !$wgUseSquid && !$wgUseFileCache ) {
-               echo "Squid/file cache not enabled ... nothing to purge.\n";
-               return;
-       }
-       $BATCH_SIZE = 500;
-       $count = 0;
-       while ( !feof( $fileHandle ) ) {
-               $dbKey = trim( fgets( $fileHandle ) );
-               if ( $dbKey == '' ) continue; // last line?
-               $title = Title::newFromDBkey( $dbKey );
-               if ( $title ) {
-                       $title->purgeSquid(); // send PURGE
-                       HTMLFileCache::clearFileCache( $title ); // purge 
poor-mans's squid
-                       $count++;
-                       echo "... $dbKey\n";
-                       if ( $count % $BATCH_SIZE ) {
-                               wfWaitForSlaves( 5 ); // not really needed
-                       }
-               } else {
-                       echo "Invalid title - cannot purge: $dbKey\n";
-               }
-       }
-       echo "Squid/file cache purge of page list complete ... {$count} 
pages\n";
-}

Modified: trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php
===================================================================
--- trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php   
2011-10-18 03:21:37 UTC (rev 100106)
+++ trunk/extensions/FlaggedRevs/maintenance/purgeReviewablePages.php   
2011-10-18 04:05:04 UTC (rev 100107)
@@ -1,55 +1,132 @@
 <?php
-
+/**
+ * @ingroup Maintenance
+ */
 if ( getenv( 'MW_INSTALL_PATH' ) ) {
-    $IP = getenv( 'MW_INSTALL_PATH' );
+       $IP = getenv( 'MW_INSTALL_PATH' );
 } else {
-    $IP = dirname(__FILE__).'/../../..';
+       $IP = dirname(__FILE__).'/../../..';
 }
-require "$IP/maintenance/commandLine.inc";
-require dirname(__FILE__) . '/purgeReviewablePages.inc';
 
-$makeList = isset( $options['makelist'] );
-$purgeList = isset( $options['purgelist'] );
+require_once( "$IP/maintenance/Maintenance.php" );
 
-if ( isset( $options['help'] ) || ( !$makeList && !$purgeList ) ) {
-       echo <<<TEXT
-Purpose:
-       Use to purge squid/file cache for all reviewable pages
-Usage:
-    php purgeReviewablePages.php --help
-       php purgeReviewablePages.php --makelist
-       php purgeReviewablePages.php --purgelist
+class PurgeReviewablePages extends Maintenance {
 
-       --help          : This help message
-       --makelist      : Build the list of reviewable pages to 
pagesToPurge.list
-       --purgelist     : Purge the list of pages in pagesToPurge.list
+       public function __construct() {
+               $this->mDescription = "Use to purge squid/file cache for all 
reviewable pages";
+               $this->addOption( 'makelist', "Build the list of reviewable 
pages to pagesToPurge.list", false, false );
+               $this->addOption( 'purgelist', "Purge the list of pages in 
pagesToPurge.list", false, false );
+               $this->setBatchSize( 1000 );
+       }
 
-TEXT;
-       exit( 0 );
-}
+       public function execute() {
+               $fileName = "pagesToPurge.list";
+               // Build the list file...
+               if ( $this->getOption( 'makelist' ) ) {
+                       $fileHandle = fopen( $fileName, 'w+' );
+                       if ( !$fileHandle ) {
+                               $this->error( "Can't open file to create purge 
list.", 1 );
+                       }
+                       $this->list_reviewable_pages( $fileHandle );
+                       fclose( $fileHandle );
+               // Purge pages on the list file...
+               } elseif ( $this->getOption( 'purgelist' ) ) {
+                       $fileHandle = fopen( $fileName, 'r' );
+                       if ( !$fileHandle ) {
+                               $this->error( "Can't open file to read purge 
list.", 1 );
+                       }
+                       $this->purge_reviewable_pages( $fileHandle );
+                       fclose( $fileHandle );
+               } else {
+                       $this->error( "No purge list action specified.", 1 );
+               }
+       }
 
-error_reporting( E_ALL );
+       protected function list_reviewable_pages( $fileHandle ) {
+               global $wgFlaggedRevsNamespaces, $wgUseSquid, $wgUseFileCache;
 
-$fileName = "pagesToPurge.list";
+               $this->output( "Building list of all reviewable pages to purge 
...\n" );
+               if ( !$wgUseSquid && !$wgUseFileCache ) {
+                       $this->output( "Squid/file cache not enabled ... 
nothing to purge.\n" );
+                       return;
+               } elseif ( empty( $wgFlaggedRevsNamespaces ) ) {
+                       $this->output( "There are no reviewable namespaces ... 
nothing to purge.\n" );
+                       return;
+               }
 
-if ( $makeList ) {
-       $db = wfGetDB( DB_MASTER );
-       $fileHandle = fopen( $fileName, 'w+' );
-       if ( !$fileHandle ) {
-               echo "Can't open file to create purge list.\n";
-               exit( -1 );
+               $db = wfGetDB( DB_MASTER );
+
+               $start = $db->selectField( 'page', 'MIN(page_id)', false, 
__FUNCTION__ );
+               $end = $db->selectField( 'page', 'MAX(page_id)', false, 
__FUNCTION__ );
+               if ( is_null( $start ) || is_null( $end ) ) {
+                       $this->output( "... page table seems to be empty.\n" );
+                       return;
+               }
+               # Do remaining chunk
+               $end += $this->mBatchSize - 1;
+               $blockStart = $start;
+               $blockEnd = $start + $this->mBatchSize - 1;
+
+               $count = 0;
+               while ( $blockEnd <= $end ) {
+                       $this->output( "... doing page_id from $blockStart to 
$blockEnd\n" );
+                       $res = $db->select( 'page', '*', 
+                               array(
+                                       "page_id BETWEEN $blockStart AND 
$blockEnd",
+                                       'page_namespace' => 
$wgFlaggedRevsNamespaces ),
+                               __FUNCTION__
+                       );
+                       # Go through and append each purgeable page...
+                       foreach ( $res as $row ) {
+                               $title = Title::newFromRow( $row );
+                               $fa = FlaggableWikiPage::getTitleInstance( 
$title );
+                               if ( $fa->isReviewable() ) {
+                                       # Need to purge this page - add to list
+                                       fwrite( $fileHandle, 
$title->getPrefixedDBKey() . "\n" );
+                                       $count++;
+                               }
+                       }
+                       $db->freeResult( $res );
+                       $blockStart += $this->mBatchSize - 1;
+                       $blockEnd += $this->mBatchSize - 1;
+                       wfWaitForSlaves( 5 ); // not really needed
+               }
+               $this->output( "List of reviewable pages to purge complete ... 
{$count} pages\n" );
        }
-       list_reviewable_pages( $db, $fileHandle );
-       fclose( $fileHandle );
-}
 
-if ( $purgeList ) {
-       $db = wfGetDB( DB_MASTER );
-       $fileHandle = fopen( $fileName, 'r' );
-       if ( !$fileHandle ) {
-               echo "Can't open file to read purge list.\n";
-               exit( -1 );
+       protected function purge_reviewable_pages( $fileHandle ) {
+               global $wgUseSquid, $wgUseFileCache;
+               $this->output( "Purging squid cache for list of pages to purge 
...\n" );
+               if ( !$wgUseSquid && !$wgUseFileCache ) {
+                       $this->output( "Squid/file cache not enabled ... 
nothing to purge.\n" );
+                       return;
+               }
+
+               $db = wfGetDB( DB_MASTER );
+
+               $count = 0;
+               while ( !feof( $fileHandle ) ) {
+                       $dbKey = trim( fgets( $fileHandle ) );
+                       if ( $dbKey == '' ) {
+                               continue; // last line?
+                       }
+                       $title = Title::newFromDBkey( $dbKey );
+                       if ( $title ) {
+                               $title->purgeSquid(); // send PURGE
+                               HTMLFileCache::clearFileCache( $title ); // 
purge poor-mans's squid
+                               $this->output( "... $dbKey\n" );
+
+                               $count++;
+                               if ( ( $count % $this->mBatchSize ) == 0 ) {
+                                       wfWaitForSlaves( 5 ); // not really 
needed
+                               }
+                       } else {
+                               $this->output( "Invalid title - cannot purge: 
$dbKey\n" );
+                       }
+               }
+               $this->output( "Squid/file cache purge of page list complete 
... {$count} pages\n" );
        }
-       purge_reviewable_pages( $db, $fileHandle );
-       fclose( $fileHandle );
 }
+
+$maintClass = "PurgeReviewablePages";
+require_once( RUN_MAINTENANCE_IF_MAIN );


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to