From: Aaron Schulz Date: Wed, 29 Feb 2012 22:45:17 +0000 (+0000) Subject: In populateImageSha1.php: X-Git-Tag: 1.31.0-rc.0~24453 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=7a1c2de0bb6425a60739eb179bf71e74d590d402;p=lhc%2Fweb%2Fwiklou.git In populateImageSha1.php: * Added 'force' parameter to run the script on rows with sha1 existing values (and where the file exists) * Do the all the old versions of files after doing their current versions * Broke long line and made a few minor cleanups --- diff --git a/maintenance/populateImageSha1.php b/maintenance/populateImageSha1.php index a009223412..54ff247f15 100644 --- a/maintenance/populateImageSha1.php +++ b/maintenance/populateImageSha1.php @@ -26,6 +26,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance { public function __construct() { parent::__construct(); $this->mDescription = "Populate the img_sha1 field"; + $this->addOption( 'force', "Recalculate sha1 for rows that already have a value" ); $this->addOption( 'method', "Use 'pipe' to pipe to mysql command line,\n" . "\t\tdefault uses Database class", false, true ); $this->addOption( 'file', 'Fix for a specific file, without File: namespace prefixed', false, true ); @@ -50,6 +51,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance { public function doDBUpdates() { $method = $this->getOption( 'method', 'normal' ); $file = $this->getOption( 'file' ); + $force = $this->getOption( 'force' ); $t = -microtime( true ); $dbw = wfGetDB( DB_MASTER ); @@ -66,12 +68,18 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance { } $this->output( "Populating img_sha1 field for specified files\n" ); } else { - $res = $dbw->select( 'image', - array( 'img_name' ), array( 'img_sha1' => '' ), __METHOD__ ); - $this->output( "Populating img_sha1 field\n" ); + if ( $force ) { + $conds = array(); + $this->output( "Populating and recalculating img_sha1 field\n" ); + } else { + $conds = array( 'img_sha1' => '' ); + $this->output( "Populating img_sha1 field\n" ); + } + $res = $dbw->select( 'image', array( 'img_name' ), $conds, __METHOD__ ); } $imageTable = $dbw->tableName( 'image' ); + $oldImageTable = $dbw->tableName( 'oldimage' ); if ( $method == 'pipe' ) { // Opening a pipe allows the SHA-1 operation to be done in parallel @@ -90,23 +98,39 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance { $i = 0; foreach ( $res as $row ) { if ( $i % $this->mBatchSize == 0 ) { - $this->output( sprintf( "Done %d of %d, %5.3f%% \r", $i, $numRows, $i / $numRows * 100 ) ); + $this->output( sprintf( + "Done %d of %d, %5.3f%% \r", $i, $numRows, $i / $numRows * 100 ) ); wfWaitForSlaves(); } $file = wfLocalFile( $row->img_name ); if ( !$file ) { continue; } + // Upgrade the current file version... $sha1 = $file->getRepo()->getFileSha1( $file->getPath() ); - if ( strval( $sha1 ) !== '' ) { + if ( strval( $sha1 ) !== '' ) { // file on disk and hashed properly $sql = "UPDATE $imageTable SET img_sha1=" . $dbw->addQuotes( $sha1 ) . - " WHERE img_name=" . $dbw->addQuotes( $row->img_name ); + " WHERE img_name=" . $dbw->addQuotes( $file->getName() ); if ( $method == 'pipe' ) { fwrite( $pipe, "$sql;\n" ); } else { $dbw->query( $sql, __METHOD__ ); } } + // Upgrade the old file versions... + foreach ( $file->getHistory() as $oldFile ) { + $sha1 = $oldFile->getRepo()->getFileSha1( $oldFile->getPath() ); + if ( strval( $sha1 ) !== '' ) { // file on disk and hashed properly + $sql = "UPDATE $oldImageTable SET oi_sha1=" . $dbw->addQuotes( $sha1 ) . + " WHERE (oi_name=" . $dbw->addQuotes( $oldFile->getName() ) . " AND" . + " oi_archive_name=" . $dbw->addQuotes( $oldFile->getArchiveName() ) . ")"; + if ( $method == 'pipe' ) { + fwrite( $pipe, "$sql;\n" ); + } else { + $dbw->query( $sql, __METHOD__ ); + } + } + } $i++; } if ( $method == 'pipe' ) {