Merge "$wgUseSquid unused since parent commit (fa1a8d5)"
authorAaron Schulz <aschulz@wikimedia.org>
Mon, 28 May 2012 22:36:38 +0000 (22:36 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 28 May 2012 22:36:38 +0000 (22:36 +0000)
1  2 
includes/filerepo/file/LocalFile.php

@@@ -263,10 -263,6 +263,10 @@@ class LocalFile extends File 
                $this->setProps( $props );
        }
  
 +      /**
 +       * @param $prefix string
 +       * @return array
 +       */
        function getCacheFields( $prefix = 'img_' ) {
                static $fields = array( 'size', 'width', 'height', 'bits', 'media_type',
                        'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user', 'user_text', 'description' );
        /**
         * Decode a row from the database (either object or array) to an array
         * with timestamps and MIME types decoded, and the field prefix removed.
 +       * @param $row
 +       * @param $prefix string
 +       * @throws MWException
         * @return array
         */
        function decodeRow( $row, $prefix = 'img_' ) {
  
                $dbw->update( 'image',
                        array(
 +                              'img_size'       => $this->size, // sanity
                                'img_width'      => $this->width,
                                'img_height'     => $this->height,
                                'img_bits'       => $this->bits,
        /** getPath inherited */
        /** isVisible inhereted */
  
 +      /**
 +       * @return bool
 +       */
        function isMissing() {
                if ( $this->missing === null ) {
                        list( $fileExists ) = $this->repo->fileExists( $this->getVirtualUrl() );
        /**
         * Return the width of the image
         *
 -       * Returns false on error
 -       * @return bool
 +       * @param $page int
 +       * @return bool|int Returns false on error
         */
        public function getWidth( $page = 1 ) {
                $this->load();
        /**
         * Return the height of the image
         *
 -       * Returns false on error
 -       * @return bool
 +       * @param $page int
 +       * @return bool|int Returns false on error
         */
        public function getHeight( $page = 1 ) {
                $this->load();
         * Returns ID or name of user who uploaded the file
         *
         * @param $type string 'text' or 'id'
 +       * @return int|string
         */
        function getUser( $type = 'text' ) {
                $this->load();
                return $this->metadata;
        }
  
 +      /**
 +       * @return int
 +       */
        function getBitDepth() {
                $this->load();
                return $this->bits;
  
        /**
         * Return the size of the image file, in bytes
 +       * @return int
         */
        public function getSize() {
                $this->load();
  
        /**
         * Returns the mime type of the file.
 +       * @return string
         */
        function getMimeType() {
                $this->load();
        /**
         * Return the type of the media in the file.
         * Use the value returned by this function with the MEDIATYPE_xxx constants.
 +       * @return string
         */
        function getMediaType() {
                $this->load();
  
        /**
         * Fix thumbnail files from 1.4 or before, with extreme prejudice
 +       * @TODO: do we still care about this? Perhaps a maintenance script
 +       *        can be made instead. Enabling this code results in a serious
 +       *        RTT regression for wikis without 404 handling.
         */
        function migrateThumbFile( $thumbName ) {
                $thumbDir = $this->getThumbPath();
                }
                */
  
 +              /*
                if ( $this->repo->fileExists( $thumbDir ) ) {
                        // Delete file where directory should be
                        $this->repo->cleanupBatch( array( $thumbDir ) );
                }
 +              */
        }
  
        /** getHandler inherited */
         * @return array first element is the base dir, then files in that base dir.
         */
        function getThumbnails( $archiveName = false ) {
 -              $this->load();
 -
                if ( $archiveName ) {
                        $dir = $this->getArchiveThumbPath( $archiveName );
                } else {
         */
        function purgeOldThumbnails( $archiveName ) {
                global $wgUseSquid;
 +              wfProfileIn( __METHOD__ );
 +
                // Get a list of old thumbnails and URLs
                $files = $this->getThumbnails( $archiveName );
                $dir = array_shift( $files );
                        }
                        SquidUpdate::purge( $urls );
                }
 +
 +              wfProfileOut( __METHOD__ );
        }
  
        /**
         */
        function purgeThumbnails( $options = array() ) {
                global $wgUseSquid;
 +              wfProfileIn( __METHOD__ );
  
                // Delete thumbnails
                $files = $this->getThumbnails();
                        }
                        SquidUpdate::purge( $urls );
                }
 +
 +              wfProfileOut( __METHOD__ );
        }
  
        /**
        /** purgeDescription inherited */
        /** purgeEverything inherited */
  
 +      /**
 +       * @param $limit null
 +       * @param $start null
 +       * @param $end null
 +       * @param $inc bool
 +       * @return array
 +       */
        function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
                $dbr = $this->repo->getSlaveDB();
                $tables = array( 'oldimage' );
         * @param $comment String: upload description
         * @param $pageText String: text to use for the new description page,
         *                  if a new description page is created
 -       * @param $flags Integer: flags for publish()
 -       * @param $props Array: File properties, if known. This can be used to reduce the
 +       * @param $flags Integer|bool: flags for publish()
 +       * @param $props Array|bool: File properties, if known. This can be used to reduce the
         *               upload time when uploading virtual URLs for which the file info
         *               is already known
 -       * @param $timestamp String: timestamp for img_timestamp, or false to use the current time
 -       * @param $user Mixed: User object or null to use $wgUser
 +       * @param $timestamp String|bool: timestamp for img_timestamp, or false to use the current time
 +       * @param $user User|null: User object or null to use $wgUser
         *
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
  
        /**
         * Record a file upload in the upload log and the image table
 +       * @param $oldver
 +       * @param $desc string
 +       * @param $license string
 +       * @param $copyStatus string
 +       * @param $source string
 +       * @param $watch bool
 +       * @param $timestamp string|bool
         * @return bool
         */
        function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
  
        /**
         * Record a file upload in the upload log and the image table
 +       * @param $oldver
 +       * @param $comment string
 +       * @param $pageText string
 +       * @param $props bool|array
 +       * @param $timestamp bool|string
 +       * @param $user null|User
         * @return bool
         */
        function recordUpload2(
                $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null
        ) {
 +              wfProfileIn( __METHOD__ );
 +
                if ( is_null( $user ) ) {
                        global $wgUser;
                        $user = $wgUser;
                $dbw->begin( __METHOD__ );
  
                if ( !$props ) {
 +                      wfProfileIn( __METHOD__ . '-getProps' );
                        $props = $this->repo->getFileProps( $this->getVirtualUrl() );
 +                      wfProfileOut( __METHOD__ . -'getProps' );
                }
  
                if ( $timestamp === false ) {
                $props['timestamp'] = wfTimestamp( TS_MW, $timestamp ); // DB -> TS_MW
                $this->setProps( $props );
  
 -              # Delete thumbnails
 -              $this->purgeThumbnails();
 -
 -              # The file is already on its final location, remove it from the squid cache
 -              SquidUpdate::purge( array( $this->getURL() ) );
 -
                # Fail now if the file isn't there
                if ( !$this->fileExists ) {
                        wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
 +                      wfProfileOut( __METHOD__ );
                        return false;
                }
  
                        __METHOD__,
                        'IGNORE'
                );
 -
                if ( $dbw->affectedRows() == 0 ) {
                        # (bug 34993) Note: $oldver can be empty here, if the previous
                        # version of the file was broken. Allow registration of the new
                                __METHOD__
                        );
                } else {
 -                      # This is a new file
 -                      # Update the image count
 -                      $dbw->begin( __METHOD__ );
 -                      $dbw->update(
 -                              'site_stats',
 -                              array( 'ss_images = ss_images+1' ),
 -                              '*',
 -                              __METHOD__
 -                      );
 -                      $dbw->commit( __METHOD__ );
 +                      # This is a new file, so update the image count
 +                      DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
                }
  
                $descTitle = $this->getTitle();
                $action = $reupload ? 'overwrite' : 'upload';
                $log->addEntry( $action, $descTitle, $comment, array(), $user );
  
 +              wfProfileIn( __METHOD__ . '-edit' );
                if ( $descTitle->exists() ) {
                        # Create a null revision
                        $latest = $descTitle->getLatestRevID();
                        # Squid and file cache for the description page are purged by doEdit.
                        $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
                }
 +              wfProfileOut( __METHOD__ . '-edit' );
  
                # Commit the transaction now, in case something goes wrong later
                # The most important thing is that files don't get lost, especially archives
                # which in fact doesn't really exist (bug 24978)
                $this->saveToCache();
  
 +              if ( $reupload ) {
 +                      # Delete old thumbnails
 +                      wfProfileIn( __METHOD__ . '-purge' );
 +                      $this->purgeThumbnails();
 +                      wfProfileOut( __METHOD__ . '-purge' );
 +
 +                      # Remove the old file from the squid cache
 +                      SquidUpdate::purge( array( $this->getURL() ) );
 +              }
 +
                # Hooks, hooks, the magic of hooks...
 +              wfProfileIn( __METHOD__ . '-hooks' );
                wfRunHooks( 'FileUpload', array( $this, $reupload, $descTitle->exists() ) );
 +              wfProfileOut( __METHOD__ . '-hooks' );
  
                # Invalidate cache for all pages using this file
                $update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' );
                        $update->doUpdate();
                }
  
 +              wfProfileOut( __METHOD__ );
                return true;
        }
  
                # Get old version relative paths
                $archiveNames = $batch->addOlds();
                $status = $batch->execute();
 +              $this->unlock(); // done
 +
                if ( $status->isOK() ) {
 -                      // Update site_stats
 -                      $dbw = $this->repo->getMasterDB();
 -                      $site_stats = $dbw->tableName( 'site_stats' );
 -                      $dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ );
 +                      DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => -1 ) ) );
                }
 -              $this->unlock(); // done
  
                $this->purgeEverything();
                foreach ( $archiveNames as $archiveName ) {
                return $pout->getText();
        }
  
 +      /**
 +       * @return string
 +       */
        function getDescription() {
                $this->load();
                return $this->description;
        }
  
 +      /**
 +       * @return bool|string
 +       */
        function getTimestamp() {
                $this->load();
                return $this->timestamp;
        }
  
 +      /**
 +       * @return string
 +       */
        function getSha1() {
                $this->load();
                // Initialise now if necessary
                return $this->sha1;
        }
  
 +      /**
 +       * @return bool
 +       */
        function isCacheable() {
                $this->load();
                return strlen( $this->metadata ) <= self::CACHE_FIELD_MAX_LEN; // avoid OOMs
@@@ -1578,11 -1515,6 +1578,11 @@@ class LocalFileDeleteBatch 
        var $reason, $srcRels = array(), $archiveUrls = array(), $deletionBatch, $suppress;
        var $status;
  
 +      /**
 +       * @param $file File
 +       * @param $reason string
 +       * @param $suppress bool
 +       */
        function __construct( File $file, $reason = '', $suppress = false ) {
                $this->file = $file;
                $this->reason = $reason;
                $this->srcRels['.'] = $this->file->getRel();
        }
  
 +      /**
 +       * @param $oldName string
 +       */
        function addOld( $oldName ) {
                $this->srcRels[$oldName] = $this->file->getArchiveRel( $oldName );
                $this->archiveUrls[] = $this->file->getArchiveUrl( $oldName );
                return $archiveNames;
        }
  
 +      /**
 +       * @return array
 +       */
        function getOldRels() {
                if ( !isset( $this->srcRels['.'] ) ) {
                        $oldRels =& $this->srcRels;
                return array( $oldRels, $deleteCurrent );
        }
  
 +      /**
 +       * @return array
 +       */
        protected function getHashes() {
                $hashes = array();
                list( $oldRels, $deleteCurrent ) = $this->getOldRels();
         * @return FileRepoStatus
         */
        function execute() {
-               global $wgUseSquid;
                wfProfileIn( __METHOD__ );
  
                $this->file->lock();
  
        /**
         * Removes non-existent files from a deletion batch.
 +       * @param $batch array
         * @return array
         */
        function removeNonexistentFiles( $batch ) {
@@@ -1920,10 -1841,6 +1919,10 @@@ class LocalFileRestoreBatch 
  
        var $cleanupBatch, $ids, $all, $unsuppress = false;
  
 +      /**
 +       * @param $file File
 +       * @param $unsuppress bool
 +       */
        function __construct( File $file, $unsuppress = false ) {
                $this->file = $file;
                $this->cleanupBatch = $this->ids = array();
                        if ( !$exists ) {
                                wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" );
  
 -                              // Update site_stats
 -                              $site_stats = $dbw->tableName( 'site_stats' );
 -                              $dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ );
 +                              DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
  
                                $this->file->purgeEverything();
                        } else {
  
        /**
         * Removes non-existent files from a store batch.
 +       * @param $triplets array
         * @return array
         */
        function removeNonexistentFiles( $triplets ) {
                $files = $filteredTriplets = array();
 -              foreach ( $triplets as $file )
 +              foreach ( $triplets as $file ) {
                        $files[$file[0]] = $file[0];
 +              }
  
                $result = $this->file->repo->fileExistsBatch( $files );
  
  
        /**
         * Removes non-existent files from a cleanup batch.
 +       * @param $batch array
         * @return array
         */
        function removeNonexistentFromCleanup( $batch ) {
@@@ -2281,17 -2197,8 +2280,17 @@@ class LocalFileMoveBatch 
         */
        var $target;
  
 -      var $cur, $olds, $oldCount, $archive, $db;
 +      var $cur, $olds, $oldCount, $archive;
  
 +      /**
 +       * @var DatabaseBase
 +       */
 +      var $db;
 +
 +      /**
 +       * @param File $file
 +       * @param Title $target
 +       */
        function __construct( File $file, Title $target ) {
                $this->file = $file;
                $this->target = $target;
                $this->newName = $this->file->repo->getNameFromTitle( $this->target );
                $this->oldRel = $this->oldHash . $this->oldName;
                $this->newRel = $this->newHash . $this->newName;
 -              $this->db = $file->repo->getMasterDb();
 +              $this->db = $file->getRepo()->getMasterDb();
        }
  
        /**
  
        /**
         * Removes non-existent files from move batch.
 +       * @param $triplets array
         * @return array
         */
        function removeNonexistentFiles( $triplets ) {