X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/mediawiki.git/blobdiff_plain/a4b52d2fe555a507c376e78ee624898c55968364..d7967d5e4460e08b6b258307afbca0596b18a3dd:/maintenance/dumpBackup.php diff --git a/maintenance/dumpBackup.php b/maintenance/dumpBackup.php index 51d9ee0b..9ec5674d 100644 --- a/maintenance/dumpBackup.php +++ b/maintenance/dumpBackup.php @@ -2,144 +2,37 @@ /** * Copyright (C) 2005 Brion Vibber * http://www.mediawiki.org/ - * + * * 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 + * 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., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * - * @package MediaWiki - * @subpackage SpecialPage + * @addtogroup SpecialPage */ $originalDir = getcwd(); -$optionsWithArgs = array( 'server', 'pagelist' ); +$optionsWithArgs = array( 'pagelist', 'start', 'end' ); require_once( 'commandLine.inc' ); -require_once( 'SpecialExport.php' ); - -class BackupDumper { - var $reportingInterval = 100; - var $reporting = true; - var $pageCount = 0; - var $revCount = 0; - var $server = null; // use default - var $pages = null; // all pages - - function BackupDumper() { - $this->stderr = fopen( "php://stderr", "wt" ); - } - - function dump( $history ) { - # This shouldn't happen if on console... ;) - header( 'Content-type: text/html; charset=UTF-8' ); - - # Notice messages will foul up your XML output even if they're - # relatively harmless. - ini_set( 'display_errors', false ); - - $this->startTime = wfTime(); - - $dbr =& wfGetDB( DB_SLAVE ); - $this->maxCount = $dbr->selectField( 'page', 'MAX(page_id)', '', 'BackupDumper::dump' ); - $this->startTime = wfTime(); - - $db =& $this->backupDb(); - $exporter = new WikiExporter( $db, $history, MW_EXPORT_STREAM ); - $exporter->setPageCallback( array( &$this, 'reportPage' ) ); - $exporter->setRevisionCallback( array( &$this, 'revCount' ) ); - - $exporter->openStream(); - - if ( is_null( $this->pages ) ) { - $exporter->allPages(); - } else { - $exporter->pagesByName( $this->pages ); - } - - $exporter->closeStream(); - - $this->report( true ); - } - - function &backupDb() { - global $wgDBadminuser, $wgDBadminpassword; - global $wgDBname; - $db =& new Database( $this->backupServer(), $wgDBadminuser, $wgDBadminpassword, $wgDBname ); - $timeout = 3600 * 24; - $db->query( "SET net_read_timeout=$timeout" ); - $db->query( "SET net_write_timeout=$timeout" ); - return $db; - } - - function backupServer() { - global $wgDBserver; - return $this->server - ? $this->server - : $wgDBserver; - } +require_once( 'backup.inc' ); - function reportPage( $page ) { - $this->pageCount++; - $this->report(); - } - - function revCount( $rev ) { - $this->revCount++; - } - - function report( $final = false ) { - if( $final xor ( $this->pageCount % $this->reportingInterval == 0 ) ) { - $this->showReport(); - } - } - - function showReport() { - if( $this->reporting ) { - $delta = wfTime() - $this->startTime; - $now = wfTimestamp( TS_DB ); - if( $delta ) { - $rate = $this->pageCount / $delta; - $revrate = $this->revCount / $delta; - $portion = $this->pageCount / $this->maxCount; - $eta = $this->startTime + $delta / $portion; - $etats = wfTimestamp( TS_DB, intval( $eta ) ); - } else { - $rate = '-'; - $revrate = '-'; - $etats = '-'; - } - global $wgDBname; - $this->progress( "$now: $wgDBname $this->pageCount, ETA $etats ($rate pages/sec $revrate revs/sec)" ); - } - } - - function progress( $string ) { - fwrite( $this->stderr, $string . "\n" ); - } -} +$dumper = new BackupDumper( $argv ); -$dumper = new BackupDumper(); if( isset( $options['quiet'] ) ) { $dumper->reporting = false; } -if( isset( $options['report'] ) ) { - $dumper->reportingInterval = IntVal( $options['report'] ); -} -if( isset( $options['server'] ) ) { - $dumper->server = $options['server']; -} if ( isset( $options['pagelist'] ) ) { $olddir = getcwd(); @@ -147,17 +40,27 @@ if ( isset( $options['pagelist'] ) ) { $pages = file( $options['pagelist'] ); chdir( $olddir ); if ( $pages === false ) { - print "Unable to open file {$options['pagelist']}\n"; - exit; + wfDie( "Unable to open file {$options['pagelist']}\n" ); } $pages = array_map( 'trim', $pages ); $dumper->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) ); } +if( isset( $options['start'] ) ) { + $dumper->startId = intval( $options['start'] ); +} +if( isset( $options['end'] ) ) { + $dumper->endId = intval( $options['end'] ); +} +$dumper->skipHeader = isset( $options['skip-header'] ); +$dumper->skipFooter = isset( $options['skip-footer'] ); + +$textMode = isset( $options['stub'] ) ? WikiExporter::STUB : WikiExporter::TEXT; + if( isset( $options['full'] ) ) { - $dumper->dump( MW_EXPORT_FULL ); + $dumper->dump( WikiExporter::FULL, $textMode ); } elseif( isset( $options['current'] ) ) { - $dumper->dump( MW_EXPORT_CURRENT ); + $dumper->dump( WikiExporter::CURRENT, $textMode ); } else { $dumper->progress( << [] Actions: --full Dump complete history of every page. --current Includes only the latest revision of each page. + Options: --quiet Don't dump status reports to stderr. --report=n Report position and speed after every n pages processed. (Default: 100) + --server=h Force reading from MySQL server h + --start=n Start from page_id n + --end=n Stop before page_id n (exclusive) + --skip-header Don't output the header + --skip-footer Don't output the footer + --stub Don't perform old_text lookups; for 2-pass dump + +Fancy stuff: + --plugin=[:] Load a dump plugin class + --output=: Begin a filtered output stream; + s: file, gzip, bzip2, 7zip + --filter=[:] Add a filter on an output branch + END ); } -?> +