X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FpopulateRevisionSha1.php;h=095c26693b2e4204a89bfa5f4b4a4a7210a645df;hb=9ee6461287f5d2d6fae719ec62ae6465e0a3809d;hp=03f9b09068e35d912624abd19e369e77d4ba8f6e;hpb=5775d5e5c15098da4c1ebc121e678cee95ecaafa;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/populateRevisionSha1.php b/maintenance/populateRevisionSha1.php index 03f9b09068..095c26693b 100644 --- a/maintenance/populateRevisionSha1.php +++ b/maintenance/populateRevisionSha1.php @@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php'; class PopulateRevisionSha1 extends LoggedUpdateMaintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Populates the rev_sha1 and ar_sha1 fields"; + $this->addDescription( 'Populates the rev_sha1 and ar_sha1 fields' ); $this->setBatchSize( 200 ); } @@ -50,6 +50,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $this->error( "archive table does not exist", true ); } elseif ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) { $this->output( "rev_sha1 column does not exist\n\n", true ); + return false; } @@ -63,6 +64,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $this->output( "rev_sha1 and ar_sha1 population complete " . "[$rc revision rows, $ac archive rows].\n" ); + return true; } @@ -78,6 +80,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $end = $db->selectField( $table, "MAX($idCol)", false, __METHOD__ ); if ( !$start || !$end ) { $this->output( "...$table table seems to be empty.\n" ); + return 0; } @@ -92,18 +95,19 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { AND $idCol IS NOT NULL AND {$prefix}_sha1 = ''"; $res = $db->select( $table, '*', $cond, __METHOD__ ); - $db->begin( __METHOD__ ); + $this->beginTransaction( $db, __METHOD__ ); foreach ( $res as $row ) { if ( $this->upgradeRow( $row, $table, $idCol, $prefix ) ) { $count++; } } - $db->commit( __METHOD__ ); + $this->commitTransaction( $db, __METHOD__ ); $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; wfWaitForSlaves(); } + return $count; } @@ -114,23 +118,24 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $count = 0; $db = $this->getDB( DB_MASTER ); $res = $db->select( 'archive', '*', - array( 'ar_rev_id IS NULL', 'ar_sha1' => '' ), __METHOD__ ); + [ 'ar_rev_id IS NULL', 'ar_sha1' => '' ], __METHOD__ ); $updateSize = 0; - $db->begin( __METHOD__ ); + $this->beginTransaction( $db, __METHOD__ ); foreach ( $res as $row ) { if ( $this->upgradeLegacyArchiveRow( $row ) ) { ++$count; } if ( ++$updateSize >= 100 ) { $updateSize = 0; - $db->commit( __METHOD__ ); + $this->commitTransaction( $db, __METHOD__ ); $this->output( "Commited row with ar_timestamp={$row->ar_timestamp}\n" ); wfWaitForSlaves(); - $db->begin( __METHOD__ ); + $this->beginTransaction( $db, __METHOD__ ); } } - $db->commit( __METHOD__ ); + $this->commitTransaction( $db, __METHOD__ ); + return $count; } @@ -148,20 +153,23 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { ? Revision::newFromArchiveRow( $row ) : new Revision( $row ); $text = $rev->getSerializedData(); - } catch ( MWException $e ) { + } catch ( Exception $e ) { $this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" ); + return false; // bug 22624? } if ( !is_string( $text ) ) { # This should not happen, but sometimes does (bug 20757) $this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" ); + return false; } else { $db->update( $table, - array( "{$prefix}_sha1" => Revision::base36Sha1( $text ) ), - array( $idCol => $row->$idCol ), + [ "{$prefix}_sha1" => Revision::base36Sha1( $text ) ], + [ $idCol => $row->$idCol ], __METHOD__ ); + return true; } } @@ -174,28 +182,31 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $db = $this->getDB( DB_MASTER ); try { $rev = Revision::newFromArchiveRow( $row ); - } catch ( MWException $e ) { + } catch ( Exception $e ) { $this->output( "Text of revision with timestamp {$row->ar_timestamp} unavailable!\n" ); + return false; // bug 22624? } $text = $rev->getSerializedData(); if ( !is_string( $text ) ) { # This should not happen, but sometimes does (bug 20757) $this->output( "Data of revision with timestamp {$row->ar_timestamp} unavailable!\n" ); + return false; } else { # Archive table as no PK, but (NS,title,time) should be near unique. # Any duplicates on those should also have duplicated text anyway. $db->update( 'archive', - array( 'ar_sha1' => Revision::base36Sha1( $text ) ), - array( + [ 'ar_sha1' => Revision::base36Sha1( $text ) ], + [ 'ar_namespace' => $row->ar_namespace, 'ar_title' => $row->ar_title, 'ar_timestamp' => $row->ar_timestamp, 'ar_len' => $row->ar_len // extra sanity - ), + ], __METHOD__ ); + return true; } }