diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
commit | 183851b06bd6c52f3cae5375f433da720d410447 (patch) | |
tree | a477257decbf3360127f6739c2f9d0ec57a03d39 /maintenance/importDump.php |
MediaWiki 1.7.1 wiederhergestellt
Diffstat (limited to 'maintenance/importDump.php')
-rw-r--r-- | maintenance/importDump.php | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/maintenance/importDump.php b/maintenance/importDump.php new file mode 100644 index 00000000..1bca3296 --- /dev/null +++ b/maintenance/importDump.php @@ -0,0 +1,141 @@ +<?php +/** + * Copyright (C) 2005 Brion Vibber <brion@pobox.com> + * 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 + * (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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @package MediaWiki + * @subpackage Maintenance + */ + +$optionsWithArgs = array( 'report' ); + +require_once( 'commandLine.inc' ); +require_once( 'SpecialImport.php' ); + +class BackupReader { + var $reportingInterval = 100; + var $reporting = true; + var $pageCount = 0; + var $revCount = 0; + var $dryRun = false; + + function BackupReader() { + $this->stderr = fopen( "php://stderr", "wt" ); + } + + function reportPage( $page ) { + $this->pageCount++; + } + + function handleRevision( $rev ) { + $title = $rev->getTitle(); + if (!$title) { + $this->progress( "Got bogus revision with null title!" ); + return; + } + $display = $title->getPrefixedText(); + $timestamp = $rev->getTimestamp(); + #echo "$display $timestamp\n"; + + $this->revCount++; + $this->report(); + + if( !$this->dryRun ) { + call_user_func( $this->importCallback, $rev ); + } + } + + 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" ); + } + + function importFromFile( $filename ) { + if( preg_match( '/\.gz$/', $filename ) ) { + $filename = 'compress.zlib://' . $filename; + } + $file = fopen( $filename, 'rt' ); + return $this->importFromHandle( $file ); + } + + function importFromStdin() { + $file = fopen( 'php://stdin', 'rt' ); + return $this->importFromHandle( $file ); + } + + function importFromHandle( $handle ) { + $this->startTime = wfTime(); + + $source = new ImportStreamSource( $handle ); + $importer = new WikiImporter( $source ); + + $importer->setPageCallback( array( &$this, 'reportPage' ) ); + $this->importCallback = $importer->setRevisionCallback( + array( &$this, 'handleRevision' ) ); + + return $importer->doImport(); + } +} + +if( wfReadOnly() ) { + wfDie( "Wiki is in read-only mode; you'll need to disable it for import to work.\n" ); +} + +$reader = new BackupReader(); +if( isset( $options['quiet'] ) ) { + $reader->reporting = false; +} +if( isset( $options['report'] ) ) { + $reader->reportingInterval = intval( $options['report'] ); +} +if( isset( $options['dry-run'] ) ) { + $reader->dryRun = true; +} + +if( isset( $args[0] ) ) { + $result = $reader->importFromFile( $args[0] ); +} else { + $result = $reader->importFromStdin(); +} + +if( WikiError::isError( $result ) ) { + echo $result->getMessage() . "\n"; +} else { + echo "Done!\n"; +} + +?> |