summaryrefslogtreecommitdiff
path: root/maintenance/storage/dumpRev.php
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/storage/dumpRev.php')
-rw-r--r--maintenance/storage/dumpRev.php50
1 files changed, 44 insertions, 6 deletions
diff --git a/maintenance/storage/dumpRev.php b/maintenance/storage/dumpRev.php
index 720eb958..c84d8aa5 100644
--- a/maintenance/storage/dumpRev.php
+++ b/maintenance/storage/dumpRev.php
@@ -6,13 +6,51 @@
require_once( dirname(__FILE__) . '/../commandLine.inc' );
+$wgDebugLogFile = '/dev/stdout';
+
+
$dbr = wfGetDB( DB_SLAVE );
-$row = $dbr->selectRow( 'text', array( 'old_flags', 'old_text' ), array( 'old_id' => $args[0] ) );
-$obj = unserialize( $row->old_text );
+$row = $dbr->selectRow(
+ array( 'text', 'revision' ),
+ array( 'old_flags', 'old_text' ),
+ array( 'old_id=rev_text_id', 'rev_id' => $args[0] )
+);
+if ( !$row ) {
+ print "Row not found\n";
+ exit;
+}
-if ( get_class( $obj ) == 'concatenatedgziphistoryblob' ) {
- print_r( array_keys( $obj->mItems ) );
-} else {
- var_dump( $obj );
+$flags = explode( ',', $row->old_flags );
+$text = $row->old_text;
+if ( in_array( 'external', $flags ) ) {
+ print "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' ) {
+ print "Found external CGZ\n";
+ $blob->uncompress();
+ print "Items: (" . implode( ', ', array_keys( $blob->mItems ) ) . ")\n";
+ $text = $blob->getItem( $m[3] );
+ } else {
+ print "CGZ expected at $text, got " . gettype( $blob ) . "\n";
+ $text = $blob;
+ }
+ } else {
+ print "External plain $text\n";
+ $text = ExternalStore::fetchFromURL( $text );
+ }
+}
+if ( in_array( 'gzip', $flags ) ) {
+ $text = gzinflate( $text );
+}
+if ( in_array( 'object', $flags ) ) {
+ $text = unserialize( $text );
}
+if ( is_object( $text ) ) {
+ print "Unexpectedly got object of type: " . get_class( $text ) . "\n";
+} else {
+ print "Text length: " . strlen( $text ) ."\n";
+ print substr( $text, 0, 100 ) . "\n";
+}