Merge "Add 3D filetype for STL files"
[lhc/web/wiklou.git] / includes / registration / ExtensionRegistry.php
index c5b2150..0c5a67e 100644 (file)
@@ -31,7 +31,7 @@ class ExtensionRegistry {
        /**
         * Bump whenever the registration cache needs resetting
         */
-       const CACHE_VERSION = 5;
+       const CACHE_VERSION = 6;
 
        /**
         * Special key that defines the merge strategy
@@ -40,11 +40,6 @@ class ExtensionRegistry {
         */
        const MERGE_STRATEGY = '_merge_strategy';
 
-       /**
-        * @var BagOStuff
-        */
-       protected $cache;
-
        /**
         * Array of loaded things, keyed by name, values are credits information
         *
@@ -90,16 +85,6 @@ class ExtensionRegistry {
                return self::$instance;
        }
 
-       public function __construct() {
-               // We use a try/catch because we don't want to fail here
-               // if $wgObjectCaches is not configured properly for APC setup
-               try {
-                       $this->cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
-               } catch ( MWException $e ) {
-                       $this->cache = new EmptyBagOStuff();
-               }
-       }
-
        /**
         * @param string $path Absolute path to the JSON file
         */
@@ -126,7 +111,7 @@ class ExtensionRegistry {
         *  be loaded then).
         */
        public function loadFromQueue() {
-               global $wgVersion;
+               global $wgVersion, $wgDevelopmentWarnings;
                if ( !$this->queued ) {
                        return;
                }
@@ -144,12 +129,19 @@ class ExtensionRegistry {
                        'mediawiki' => $wgVersion
                ];
 
+               // We use a try/catch because we don't want to fail here
+               // if $wgObjectCaches is not configured properly for APC setup
+               try {
+                       $cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
+               } catch ( MWException $e ) {
+                       $cache = new EmptyBagOStuff();
+               }
                // See if this queue is in APC
-               $key = wfMemcKey(
+               $key = $cache->makeKey(
                        'registration',
                        md5( json_encode( $this->queued + $versions ) )
                );
-               $data = $this->cache->get( $key );
+               $data = $cache->get( $key );
                if ( $data ) {
                        $this->exportExtractedData( $data );
                } else {
@@ -159,7 +151,10 @@ class ExtensionRegistry {
                        // did that, but it should be cached
                        $data['globals']['wgAutoloadClasses'] += $data['autoload'];
                        unset( $data['autoload'] );
-                       $this->cache->set( $key, $data, 60 * 60 * 24 );
+                       if ( !( $data['warnings'] && $wgDevelopmentWarnings ) ) {
+                               // If there were no warnings that were shown, cache it
+                               $cache->set( $key, $data, 60 * 60 * 24 );
+                       }
                }
                $this->queued = [];
        }
@@ -206,6 +201,7 @@ class ExtensionRegistry {
                $versionChecker = new VersionChecker( $wgVersion );
                $extDependencies = [];
                $incompatible = [];
+               $warnings = false;
                foreach ( $queue as $path => $mtime ) {
                        $json = file_get_contents( $path );
                        if ( $json === false ) {
@@ -217,6 +213,11 @@ class ExtensionRegistry {
                        }
 
                        if ( !isset( $info['manifest_version'] ) ) {
+                               wfDeprecated(
+                                       "{$info['name']}'s extension.json or skin.json does not have manifest_version",
+                                       '1.29'
+                               );
+                               $warnings = true;
                                // For backwards-compatability, assume a version of 1
                                $info['manifest_version'] = 1;
                        }
@@ -245,6 +246,7 @@ class ExtensionRegistry {
                        $processor->extractInfo( $path, $info, $version );
                }
                $data = $processor->getExtractedInfo();
+               $data['warnings'] = $warnings;
 
                // check for incompatible extensions
                $incompatible = array_merge(