X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FmoveBatch.php;h=7d15959c324166f2447e4b301fa2bbe3d4f10856;hb=8da6b425ee5fecff64a0c0a83d82a79f4470e5e2;hp=52e6ddc62dc87b92575edfa92d52893e461f1fc8;hpb=087a9f70c5c152b72dc6c539cf64e334a0f2d029;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/moveBatch.php b/maintenance/moveBatch.php index 52e6ddc62d..7d15959c32 100644 --- a/maintenance/moveBatch.php +++ b/maintenance/moveBatch.php @@ -1,16 +1,31 @@ ] [-r ] [-i ] + * USAGE: php moveBatch.php [-u ] [-r ] [-i ] [listfile] * - * - file with two titles per line, separated with pipe characters; - * the first title is the source, the second is the destination + * [listfile] - file with two titles per line, separated with pipe characters; + * the first title is the source, the second is the destination. + * Standard input is used if listfile is not given. * - username to perform moves as * - reason to be given for moves * - number of seconds to sleep after each move @@ -19,77 +34,86 @@ * e.g. immobile_namespace for namespaces which can't be moved */ -$oldCwd = getcwd(); -$optionsWithArgs = array( 'u', 'r', 'i' ); -require_once( 'commandLine.inc' ); - -chdir( $oldCwd ); - -# Options processing - -$filename = 'php://stdin'; -$user = 'Move page script'; -$reason = ''; -$interval = 0; - -if ( isset( $args[0] ) ) { - $filename = $args[0]; -} -if ( isset( $options['u'] ) ) { - $user = $options['u']; -} -if ( isset( $options['r'] ) ) { - $reason = $options['r']; -} -if ( isset( $options['i'] ) ) { - $interval = $options['i']; -} - -$wgUser = User::newFromName( $user ); - - -# Setup complete, now start +require_once( __DIR__ . '/Maintenance.php' ); -$file = fopen( $filename, 'r' ); -if ( !$file ) { - print "Unable to read file, exiting\n"; - exit; -} - -$dbw = wfGetDB( DB_MASTER ); - -for ( $linenum = 1; !feof( $file ); $linenum++ ) { - $line = fgets( $file ); - if ( $line === false ) { - break; - } - $parts = array_map( 'trim', explode( '|', $line ) ); - if ( count( $parts ) != 2 ) { - print "Error on line $linenum, no pipe character\n"; - continue; - } - $source = Title::newFromText( $parts[0] ); - $dest = Title::newFromText( $parts[1] ); - if ( is_null( $source ) || is_null( $dest ) ) { - print "Invalid title on line $linenum\n"; - continue; - } - - - print $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText(); - $dbw->begin(); - $err = $source->moveTo( $dest, false, $reason ); - if( $err !== true ) { - print "\nFAILED: $err"; +/** + * Maintenance script to move a batch of pages. + * + * @ingroup Maintenance + */ +class MoveBatch extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Moves a batch of pages"; + $this->addOption( 'u', "User to perform move", false, true ); + $this->addOption( 'r', "Reason to move page", false, true ); + $this->addOption( 'i', "Interval to sleep between moves" ); + $this->addArg( 'listfile', 'List of pages to move, newline delimited', false ); } - $dbw->immediateCommit(); - print "\n"; - if ( $interval ) { - sleep( $interval ); + public function execute() { + global $wgUser; + + # Change to current working directory + $oldCwd = getcwd(); + chdir( $oldCwd ); + + # Options processing + $user = $this->getOption( 'u', 'Move page script' ); + $reason = $this->getOption( 'r', '' ); + $interval = $this->getOption( 'i', 0 ); + if ( $this->hasArg() ) { + $file = fopen( $this->getArg(), 'r' ); + } else { + $file = $this->getStdin(); + } + + # Setup + if ( !$file ) { + $this->error( "Unable to read file, exiting", true ); + } + $wgUser = User::newFromName( $user ); + if ( !$wgUser ) { + $this->error( "Invalid username", true ); + } + + # Setup complete, now start + $dbw = wfGetDB( DB_MASTER ); + for ( $linenum = 1; !feof( $file ); $linenum++ ) { + $line = fgets( $file ); + if ( $line === false ) { + break; + } + $parts = array_map( 'trim', explode( '|', $line ) ); + if ( count( $parts ) != 2 ) { + $this->error( "Error on line $linenum, no pipe character" ); + continue; + } + $source = Title::newFromText( $parts[0] ); + $dest = Title::newFromText( $parts[1] ); + if ( is_null( $source ) || is_null( $dest ) ) { + $this->error( "Invalid title on line $linenum" ); + continue; + } + + + $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() ); + $dbw->begin( __METHOD__ ); + $err = $source->moveTo( $dest, false, $reason ); + if ( $err !== true ) { + $msg = array_shift( $err[0] ); + $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() ); + } + $dbw->commit( __METHOD__ ); + $this->output( "\n" ); + + if ( $interval ) { + sleep( $interval ); + } + wfWaitForSlaves(); + } } - wfWaitForSlaves( 5 ); } - - +$maintClass = "MoveBatch"; +require_once( RUN_MAINTENANCE_IF_MAIN );