X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FpopulateRevisionSha1.php;h=095c26693b2e4204a89bfa5f4b4a4a7210a645df;hb=9ee6461287f5d2d6fae719ec62ae6465e0a3809d;hp=382b7be4d8651d41869eb7a5f58071be9c2105e0;hpb=8b08a7db916cc4e303e348fd2cb28f45bedc52cc;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/populateRevisionSha1.php b/maintenance/populateRevisionSha1.php index 382b7be4d8..095c26693b 100644 --- a/maintenance/populateRevisionSha1.php +++ b/maintenance/populateRevisionSha1.php @@ -22,7 +22,7 @@ * @ingroup Maintenance */ -require_once( __DIR__ . '/Maintenance.php' ); +require_once __DIR__ . '/Maintenance.php'; /** * Maintenance script that fills the rev_sha1 and ar_sha1 columns of revision @@ -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 ); } @@ -48,6 +48,10 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $this->error( "revision table does not exist", true ); } elseif ( !$db->tableExists( 'archive' ) ) { $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; } $this->output( "Populating rev_sha1 column\n" ); @@ -58,15 +62,17 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $this->output( "Populating ar_sha1 column legacy rows\n" ); $ac += $this->doSha1LegacyUpdates(); - $this->output( "rev_sha1 and ar_sha1 population complete [$rc revision rows, $ac archive rows].\n" ); + $this->output( "rev_sha1 and ar_sha1 population complete " + . "[$rc revision rows, $ac archive rows].\n" ); + return true; } /** - * @param $table string - * @param $idCol - * @param $prefix string - * @return Integer Rows changed + * @param string $table + * @param string $idCol + * @param string $prefix + * @return int Rows changed */ protected function doSha1Updates( $table, $idCol, $prefix ) { $db = $this->getDB( DB_MASTER ); @@ -74,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; } @@ -88,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; } @@ -110,31 +118,32 @@ 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; } /** - * @param $row - * @param $table - * @param $idCol - * @param $prefix + * @param stdClass $row + * @param string $table + * @param string $idCol + * @param string $prefix * @return bool */ protected function upgradeRow( $row, $table, $idCol, $prefix ) { @@ -144,58 +153,64 @@ 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; } } /** - * @param $row + * @param stdClass $row * @return bool */ protected function upgradeLegacyArchiveRow( $row ) { $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_title' => $row->ar_title, 'ar_timestamp' => $row->ar_timestamp, - 'ar_len' => $row->ar_len // extra sanity - ), + 'ar_len' => $row->ar_len // extra sanity + ], __METHOD__ ); + return true; } } } $maintClass = "PopulateRevisionSha1"; -require_once( RUN_MAINTENANCE_IF_MAIN ); +require_once RUN_MAINTENANCE_IF_MAIN;