Bug 34934: allow moving files with rows with bad oi_archive_name values.
authorAaron <aschulz@wikimedia.org>
Fri, 20 Apr 2012 19:32:39 +0000 (12:32 -0700)
committerCatrope <roan.kattouw@gmail.com>
Fri, 20 Apr 2012 19:49:49 +0000 (12:49 -0700)
Note that delete/restore already work in such cases.

Change-Id: I6b98b219b548203c4677f5be6f703585ac2cd027

includes/filerepo/file/LocalFile.php

index af1b7cd..ffadca9 100644 (file)
@@ -2319,7 +2319,8 @@ class LocalFileMoveBatch {
                        'oldimage',
                        array(
                                'oi_name' => $this->newName,
-                               'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name', $dbw->addQuotes( $this->oldName ), $dbw->addQuotes( $this->newName ) ),
+                               'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name',
+                                       $dbw->addQuotes( $this->oldName ), $dbw->addQuotes( $this->newName ) ),
                        ),
                        array( 'oi_name' => $this->oldName ),
                        __METHOD__
@@ -2328,7 +2329,10 @@ class LocalFileMoveBatch {
                $affected = $dbw->affectedRows();
                $total = $this->oldCount;
                $status->successCount += $affected;
-               $status->failCount += $total - $affected;
+               // Bug 34934: $total is based on files that actually exist.
+               // There may be more DB rows than such files, in which case $affected
+               // can be greater than $total. We use max() to avoid negatives here.
+               $status->failCount += max( 0, $total - $affected );
                if ( $status->failCount ) {
                        $status->error( 'imageinvalidfilename' );
                }