https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112736

Revision: 112736
Author:   aaron
Date:     2012-02-29 22:45:17 +0000 (Wed, 29 Feb 2012)
Log Message:
-----------
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

Modified Paths:
--------------
    trunk/phase3/maintenance/populateImageSha1.php

Modified: trunk/phase3/maintenance/populateImageSha1.php
===================================================================
--- trunk/phase3/maintenance/populateImageSha1.php      2012-02-29 22:30:23 UTC 
(rev 112735)
+++ trunk/phase3/maintenance/populateImageSha1.php      2012-02-29 22:45:17 UTC 
(rev 112736)
@@ -26,6 +26,7 @@
        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 @@
        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 @@
                        }
                        $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 @@
                $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' ) {


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to