X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=maintenance%2FdumpBackup.php;h=15189261d5fa1f2a9c65533c0fc113f8253d3445;hb=27bfa2854fe6a4b4811b7b26c632eafa54f7cb0e;hp=28ff27cb31f9728bd41f2fcc5eebda75cf7713e8;hpb=6a9585b4aaed16740183ab3fd049da3016c6ecd9;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/dumpBackup.php b/maintenance/dumpBackup.php index 28ff27cb31..15189261d5 100644 --- a/maintenance/dumpBackup.php +++ b/maintenance/dumpBackup.php @@ -1,133 +1,127 @@ + * Script that dumps wiki pages or logging database into an XML interchange + * wrapper format for export or backup + * + * Copyright © 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 + * @file + * @ingroup Dump Maintenance */ -$options = array( 'full', 'current' ); +$originalDir = getcwd(); -require_once( 'commandLine.inc' ); -require_once( 'SpecialExport.php' ); +$optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend'); -class BackupDumper { - var $reportingInterval = 100; - var $reporting = true; - var $pageCount = 0; - var $revCount = 0; - - 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(); - - $db =& $this->backupDb(); - $exporter = new WikiExporter( $db, $history, MW_EXPORT_STREAM ); - $exporter->setPageCallback( array( &$this, 'reportPage' ) ); - $exporter->setRevisionCallback( array( &$this, 'revCount' ) ); - - $exporter->openStream(); - $exporter->allPages(); - $exporter->closeStream(); - - $this->report( true ); - } - - function &backupDb() { - global $wgDBadminuser, $wgDBadminpassword; - global $wgDBserver, $wgDBname; - $db =& new Database( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname ); - return $db; - } +require_once( dirname( __FILE__ ) . '/commandLine.inc' ); +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; - if( $delta ) { - $rate = $this->pageCount / $delta; - $revrate = $this->revCount / $delta; - } else { - $rate = '-'; - $revrate = '-'; - } - $this->progress( "$this->pageCount ($rate pages/sec $revrate revs/sec)" ); - } - } - - function progress( $string ) { - fwrite( $this->stderr, $string . "\n" ); +$dumper = new BackupDumper( $argv ); + +if ( isset( $options['quiet'] ) ) { + $dumper->reporting = false; +} + +if ( isset( $options['pagelist'] ) ) { + $olddir = getcwd(); + chdir( $originalDir ); + $pages = file( $options['pagelist'] ); + chdir( $olddir ); + if ( $pages === false ) { + echo( "Unable to open file {$options['pagelist']}\n" ); + die(1); } + $pages = array_map( 'trim', $pages ); + $dumper->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) ); } -$dumper = new BackupDumper(); -if( isset( $options['quiet'] ) ) { - $dumper->reporting = false; +if ( isset( $options['start'] ) ) { + $dumper->startId = intval( $options['start'] ); +} +if ( isset( $options['end'] ) ) { + $dumper->endId = intval( $options['end'] ); +} + +if ( isset( $options['revstart'] ) ) { + $dumper->revStartId = intval( $options['revstart'] ); } -if( isset( $options['report'] ) ) { - $dumper->reportingInterval = IntVal( $options['report'] ); +if ( isset( $options['revend'] ) ) { + $dumper->revEndId = intval( $options['revend'] ); } -if( isset( $options['full'] ) ) { - $dumper->dump( MW_EXPORT_FULL ); -} elseif( isset( $options['current'] ) ) { - $dumper->dump( MW_EXPORT_CURRENT ); +$dumper->skipHeader = isset( $options['skip-header'] ); +$dumper->skipFooter = isset( $options['skip-footer'] ); +$dumper->dumpUploads = isset( $options['uploads'] ); +$dumper->dumpUploadFileContents = isset( $options['include-files'] ); + +$textMode = isset( $options['stub'] ) ? WikiExporter::STUB : WikiExporter::TEXT; + +if ( isset( $options['full'] ) ) { + $dumper->dump( WikiExporter::FULL, $textMode ); +} elseif ( isset( $options['current'] ) ) { + $dumper->dump( WikiExporter::CURRENT, $textMode ); +} elseif ( isset( $options['stable'] ) ) { + $dumper->dump( WikiExporter::STABLE, $textMode ); +} elseif ( isset( $options['logs'] ) ) { + $dumper->dump( WikiExporter::LOGS ); +} elseif ( isset($options['revrange'] ) ) { + $dumper->dump( WikiExporter::RANGE, $textMode ); } else { - $dumper->progress( <<progress( << [] Actions: - --full Dump complete history of every page. - --current Includes only the latest revision of each page. + --full Dump all revisions of every page. + --current Dump only the latest revision of every page. + --logs Dump all log events. + --stable Stable versions of pages? + --pagelist= + Where is a list of page titles to be dumped + --revrange Dump specified range of revisions, requires + revstart and revend options. Options: --quiet Don't dump status reports to stderr. --report=n Report position and speed after every n pages processed. - (Default: 100) -END + (Default: 100) + --server=h Force reading from MySQL server h + --start=n Start from page_id or log_id n + --end=n Stop before page_id or log_id n (exclusive) + --revstart=n Start from rev_id n + --revend=n Stop before rev_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 + --uploads Include upload records without files + --include-files Include files within the XML stream + --conf= Use the specified configuration file (LocalSettings.php) + + --wiki= Only back up the specified + +Fancy stuff: (Works? Add examples please.) + --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 + +ENDS ); } - -?> \ No newline at end of file