Merge "Use makeLink instead of makeKnownLink on Special:WhatLinksHere"
[lhc/web/wiklou.git] / maintenance / storage / dumpRev.php
index 6020f22..91a5f3b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Get the text of a revision, resolving external storage if needed.
+ *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( __DIR__ . '/../Maintenance.php' );
+use MediaWiki\MediaWikiServices;
+
+require_once __DIR__ . '/../Maintenance.php';
 
+/**
+ * Maintenance script that gets the text of a revision,
+ * resolving external storage if needed.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class DumpRev extends Maintenance {
        public function __construct() {
                parent::__construct();
@@ -27,53 +38,27 @@ class DumpRev extends Maintenance {
        }
 
        public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow(
-                       array( 'text', 'revision' ),
-                       array( 'old_flags', 'old_text' ),
-                       array( 'old_id=rev_text_id', 'rev_id' => $this->getArg() )
-               );
-               if ( !$row ) {
-                       $this->error( "Row not found", true );
-               }
+               $id = (int)$this->getArg();
 
-               $flags = explode( ',',  $row->old_flags );
-               $text = $row->old_text;
-               if ( in_array( 'external', $flags ) ) {
-                       $this->output( "External $text\n" );
-                       if ( preg_match( '!^DB://(\w+)/(\w+)/(\w+)$!', $text, $m ) ) {
-                               $es = ExternalStore::getStoreObject( 'DB' );
-                               $blob = $es->fetchBlob( $m[1], $m[2], $m[3] );
-                               if ( strtolower( get_class( $blob ) ) == 'concatenatedgziphistoryblob' ) {
-                                       $this->output( "Found external CGZ\n" );
-                                       $blob->uncompress();
-                                       $this->output( "Items: (" . implode( ', ', array_keys( $blob->mItems ) ) . ")\n" );
-                                       $text = $blob->getItem( $m[3] );
-                               } else {
-                                       $this->output( "CGZ expected at $text, got " . gettype( $blob ) . "\n" );
-                                       $text = $blob;
-                               }
-                       } else {
-                               $this->output( "External plain $text\n" );
-                               $text = ExternalStore::fetchFromURL( $text );
-                       }
-               }
-               if ( in_array( 'gzip', $flags ) ) {
-                       $text = gzinflate( $text );
-               }
-               if ( in_array( 'object', $flags ) ) {
-                       $obj = unserialize( $text );
-                       $text = $obj->getText();
+               $lookup = MediaWikiServices::getInstance()->getRevisionLookup();
+               $rev = $lookup->getRevisionById( $id );
+               if ( !$rev ) {
+                       $this->fatalError( "Row not found" );
                }
 
-               if ( is_object( $text ) ) {
-                       $this->error( "Unexpectedly got object of type: " . get_class( $text ) );
-               } else {
-                       $this->output( "Text length: " . strlen( $text ) . "\n" );
-                       $this->output( substr( $text, 0, 100 ) . "\n" );
+               $content = $rev->getContent( 'main' );
+               if ( !$content ) {
+                       $this->fatalError( "Text not found" );
                }
+
+               $blobStore = MediaWikiServices::getInstance()->getBlobStore();
+               $slot = $rev->getSlot( 'main' );
+               $text = $blobStore->getBlob( $slot->getAddress() );
+
+               $this->output( "Text length: " . strlen( $text ) . "\n" );
+               $this->output( substr( $text, 0, 100 ) . "\n" );
        }
 }
 
-$maintClass = "DumpRev";
-require_once( RUN_MAINTENANCE_IF_MAIN );
+$maintClass = DumpRev::class;
+require_once RUN_MAINTENANCE_IF_MAIN;