From: Mehmet Mert Yıldıran Date: Fri, 26 May 2017 01:54:32 +0000 (+0300) Subject: Add skipping to nth page option/ability for dump importing process X-Git-Tag: 1.31.0-rc.0~3026^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/pie.php?a=commitdiff_plain;h=4951c2b54f429037038cca617eb3e5860c1c271f;p=lhc%2Fweb%2Fwiklou.git Add skipping to nth page option/ability for dump importing process Usage: php importDump.php --skip-to 271500 /path_to/dumpfile.xml.gz When importing a database dump and the import process crashes (for random reasons) after a certain number of pages, the "--skip-to" parameter allows restarting the import process at a certain page instead of starting the import from scratch. Change-Id: Ib36063b69d6846fc197800bba44287493b0632c0 --- diff --git a/includes/import/WikiImporter.php b/includes/import/WikiImporter.php index 06b579a7d9..2fc9f5e527 100644 --- a/includes/import/WikiImporter.php +++ b/includes/import/WikiImporter.php @@ -39,6 +39,7 @@ class WikiImporter { private $mNoticeCallback, $mDebug; private $mImportUploads, $mImageBasePath; private $mNoUpdates = false; + private $pageOffset = 0; /** @var Config */ private $config; /** @var ImportTitleFactory */ @@ -146,6 +147,16 @@ class WikiImporter { $this->mNoUpdates = $noupdates; } + /** + * Sets 'pageOffset' value. So it will skip the first n-1 pages + * and start from the nth page. It's 1-based indexing. + * @param int $nthPage + * @since 1.29 + */ + function setPageOffset( $nthPage ) { + $this->pageOffset = $nthPage; + } + /** * Set a callback that displays notice messages * @@ -562,9 +573,19 @@ class WikiImporter { $keepReading = $this->reader->read(); $skip = false; $rethrow = null; + $pageCount = 0; try { while ( $keepReading ) { $tag = $this->reader->localName; + if ( $this->pageOffset ) { + if ( $tag === 'page' ) { + $pageCount++; + } + if ( $pageCount < $this->pageOffset ) { + $keepReading = $this->reader->next(); + continue; + } + } $type = $this->reader->nodeType; if ( !Hooks::run( 'ImportHandleToplevelXMLTag', [ $this ] ) ) { diff --git a/maintenance/importDump.php b/maintenance/importDump.php index 6717a8ebde..802619e573 100644 --- a/maintenance/importDump.php +++ b/maintenance/importDump.php @@ -80,6 +80,7 @@ TEXT 'Disable link table updates. Is faster but leaves the wiki in an inconsistent state' ); $this->addOption( 'image-base-path', 'Import files from a specified path', false, true ); + $this->addOption( 'skip-to', 'Start from nth page by skipping first n-1 pages', false, true ); $this->addArg( 'file', 'Dump file to import [else use stdin]', false ); } @@ -301,6 +302,11 @@ TEXT return false; } } + if ( $this->hasOption( 'skip-to' ) ) { + $nthPage = (int)$this->getOption( 'skip-to' ); + $importer->setPageOffset( $nthPage ); + $this->pageCount = $nthPage - 1; + } $importer->setPageCallback( [ $this, 'reportPage' ] ); $this->importCallback = $importer->setRevisionCallback( [ $this, 'handleRevision' ] );