Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/263857

Change subject: Update Wikidata - allow disabling data types
......................................................................

Update Wikidata - allow disabling data types

e.g. external-identifiers that are not ready yet to deploy

Change-Id: Ief437d4bf8054bfd1b27449b0f88e586be215935
---
M composer.lock
M extensions/Wikibase/client/config/WikibaseClient.default.php
M extensions/Wikibase/client/includes/WikibaseClient.php
M extensions/Wikibase/docs/options.wiki
M extensions/Wikibase/lib/config/WikibaseLib.default.php
M extensions/Wikibase/lib/includes/DataTypeDefinitions.php
M extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php
M extensions/Wikibase/repo/config/Wikibase.default.php
M extensions/Wikibase/repo/includes/WikibaseRepo.php
M vendor/composer/ClassLoader.php
M vendor/composer/autoload_files.php
M vendor/composer/autoload_real.php
M vendor/composer/installed.json
13 files changed, 137 insertions(+), 76 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/57/263857/1

diff --git a/composer.lock b/composer.lock
index c538093..6c47d7d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -668,7 +668,7 @@
             "version": "0.15.6",
             "source": {
                 "type": "git",
-                "url": 
"https://github.com/wikimedia/data-values-value-view.git";,
+                "url": "https://gerrit.wikimedia.org/r/data-values/value-view";,
                 "reference": "d4620fa54d0506f3319963592f9423473deca9d2"
             },
             "dist": {
@@ -1393,12 +1393,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb"
+                "reference": "0e38d250266d929976ac5b8aec810cda2447a75e"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/06ee5284d4e0a378e40caf3498963dc576e836eb";,
-                "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0e38d250266d929976ac5b8aec810cda2447a75e";,
+                "reference": "0e38d250266d929976ac5b8aec810cda2447a75e",
                 "shasum": ""
             },
             "require": {
@@ -1469,7 +1469,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2016-01-11 21:20:36"
+            "time": "2016-01-13 08:06:44"
         },
         {
             "name": "wikibase/wikimedia-badges",
@@ -1511,7 +1511,7 @@
             "support": {
                 "irc": "irc://irc.freenode.net/wikidata"
             },
-            "time": "2015-08-12 09:30:01"
+            "time": "2015-08-04 17:18:47"
         }
     ],
     "packages-dev": [],
diff --git a/extensions/Wikibase/client/config/WikibaseClient.default.php 
b/extensions/Wikibase/client/config/WikibaseClient.default.php
index 49c0dde..7c68e48 100644
--- a/extensions/Wikibase/client/config/WikibaseClient.default.php
+++ b/extensions/Wikibase/client/config/WikibaseClient.default.php
@@ -77,6 +77,18 @@
                 */
                'sharedCacheDuration' => 60 * 60,
 
+               /**
+                * List of data types (by data type id) not enabled on the wiki.
+                * This setting is intended to aid with deployment of new data 
types
+                * or on new Wikibase installs without items and properties yet.
+                *
+                * This setting should be consistent with the corresponding 
setting on the repo.
+                *
+                * WARNING: Disabling a data type after it is in use is 
dangerous
+                * and might break items.
+                */
+               'disabledDataTypes' => array(),
+
                // The type of object cache to use. Use CACHE_XXX constants.
                // This is both a repo and client setting, and should be set to 
the same value in
                // repo and clients for multiwiki setups.
diff --git a/extensions/Wikibase/client/includes/WikibaseClient.php 
b/extensions/Wikibase/client/includes/WikibaseClient.php
index c8ec0ab..29eb79f 100644
--- a/extensions/Wikibase/client/includes/WikibaseClient.php
+++ b/extensions/Wikibase/client/includes/WikibaseClient.php
@@ -485,10 +485,15 @@
                $dataTypeDefinitions = $wgWBClientDataTypes;
                Hooks::run( 'WikibaseClientDataTypes', array( 
&$dataTypeDefinitions ) );
 
+               $settings = new SettingsArray( $wgWBClientSettings );
+
                return new self(
-                       new SettingsArray( $wgWBClientSettings ),
+                       $settings,
                        $wgContLang,
-                       new DataTypeDefinitions( $dataTypeDefinitions )
+                       new DataTypeDefinitions(
+                               $dataTypeDefinitions,
+                               $settings->getSetting( 'disabledDataTypes' )
+                       )
                );
        }
 
diff --git a/extensions/Wikibase/docs/options.wiki 
b/extensions/Wikibase/docs/options.wiki
index aacf5d6..f574822 100644
--- a/extensions/Wikibase/docs/options.wiki
+++ b/extensions/Wikibase/docs/options.wiki
@@ -30,12 +30,10 @@
 :'''Warning:''' do not change this if you already have Wikibase entities in 
your database, since they may become unreadable!
 ;useChangesTable: Whether to record changes in the database, so they can be 
pushed to clients. Boolean, defaults to <code>true</code>. May be set to false 
in situations where there are no clients to notify, to preserve space. 
'''Note''' that if this is true, the <code>pruneChanges.php</code> script 
should be run periodically to remove old changes from the database table.
 ;changeHandlers: Array mapping change type IDs to handler classes. May be used 
by extensions to register additional change classes.
-;dataTypes: Array listing the available data types that can be used in snaks 
(and thus in claims and statements). The relevant data type identifiers are 
defined by the DataType extension. Default:
+;disabledDataTypes: Array listing of disabled data types on a wiki. This 
setting is intended to be used a new Wikibase install without items yet, or to 
control deployment of new data types. This setting should be set the same in 
the client and repo settings.
+Default:
 <poem>
-          array(
-              'wikibase-item',
-              'commonsMedia',
-          )
+          array()
 </poem>
 ;maxSerializedEntitySize: The maximum serialized size of entities, in KB. 
Loading and storing will fail if this size is exceeded. This is intended as a 
hard limit that prevents very large chunks of data being stored or processed 
due to abuse or erroneous code. Defaults to MediaWiki core's $wgMaxArticleSize 
setting.
 
diff --git a/extensions/Wikibase/lib/config/WikibaseLib.default.php 
b/extensions/Wikibase/lib/config/WikibaseLib.default.php
index de19c74..b530ff1 100644
--- a/extensions/Wikibase/lib/config/WikibaseLib.default.php
+++ b/extensions/Wikibase/lib/config/WikibaseLib.default.php
@@ -60,19 +60,6 @@
                'wikibase-query~restore' => 'Wikibase\EntityChange',
        ),
 
-       'dataTypes' => array(
-               'commonsMedia',
-               'globe-coordinate',
-               'quantity',
-               'monolingualtext',
-               'string',
-               'time',
-               'url',
-               'external-id',
-               'wikibase-item',
-               'wikibase-property',
-       ),
-
        'maxSerializedEntitySize' => $GLOBALS['wgMaxArticleSize'],
 );
 
diff --git a/extensions/Wikibase/lib/includes/DataTypeDefinitions.php 
b/extensions/Wikibase/lib/includes/DataTypeDefinitions.php
index fa1766c..efa04e5 100644
--- a/extensions/Wikibase/lib/includes/DataTypeDefinitions.php
+++ b/extensions/Wikibase/lib/includes/DataTypeDefinitions.php
@@ -53,9 +53,16 @@
         * (with the prefix "PT:") and value types (with the prefix "VT:") to 
data type definitions.
         * Each data type definitions are associative arrays, refer to the 
class level documentation
         * for details.
+        * @param string[] $disabledDataTypes Array of disabled data types.
         */
-       public function __construct( $dataTypeDefinitions = array() ) {
-               Assert::parameterElementType( 'array', $dataTypeDefinitions, 
'$dataTypeDefinitions' );
+       public function __construct(
+               array $dataTypeDefinitions = array(),
+               array $disabledDataTypes = array()
+       ) {
+               $dataTypeDefinitions = $this->filterDisabledDataTypes(
+                       $dataTypeDefinitions,
+                       $disabledDataTypes
+               );
 
                $this->registerDataTypes( $dataTypeDefinitions );
        }
@@ -74,7 +81,11 @@
                Assert::parameterElementType( 'array', $dataTypeDefinitions, 
'$dataTypeDefinitions' );
 
                foreach ( $dataTypeDefinitions as $id => $def ) {
-                       Assert::parameter( strpos( $id, ':' ), 
"\$dataTypeDefinitions[$id]", 'Key must start with a prefix like "PT:" or 
"VT:".' );
+                       Assert::parameter(
+                               strpos( $id, ':' ),
+                               "\$dataTypeDefinitions[$id]",
+                               'Key must start with a prefix like "PT:" or 
"VT:".'
+                       );
 
                        if ( isset( $this->dataTypeDefinitions[$id] ) ) {
                                $this->dataTypeDefinitions[$id] = array_merge(
@@ -88,6 +99,24 @@
        }
 
        /**
+        * @param array[] $dataTypeDefinitions Associative array of data types 
and definitions.
+        * @param string[] $disabledTypes List of disabled data types
+        *
+        * @return array[] Filtered data type definitions
+        */
+       private function filterDisabledDataTypes( array $dataTypeDefinitions, 
array $disabledTypes ) {
+               foreach ( $dataTypeDefinitions as $id => $def ) {
+                       if ( 0 === strpos( $id, 'PT' ) ) {
+                               if ( in_array( substr( $id, 3 ), $disabledTypes 
) ) {
+                                       unset( $dataTypeDefinitions[$id] );
+                               }
+                       }
+               }
+
+               return $dataTypeDefinitions;
+       }
+
+       /**
         * @param array $map
         * @param string $prefix
         *
diff --git a/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php 
b/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php
index 569dfb4..c4aed4e 100644
--- a/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php
@@ -16,8 +16,8 @@
  */
 class DataTypeDefinitionsTest extends \MediaWikiTestCase {
 
-       private function getDataTypeDefinitions() {
-               $definitions = array(
+       private function getDefinitions() {
+               return array(
                        'VT:FOO' => array(
                                'formatter-factory-callback' => 
'DataTypeDefinitionsTest::getFooValueFormatter',
                                'parser-factory-callback' => 
'DataTypeDefinitionsTest::getFooValueParser',
@@ -34,8 +34,10 @@
                                'formatter-factory-callback' => 
'DataTypeDefinitionsTest::getBarFormatter',
                        )
                );
+       }
 
-               return new DataTypeDefinitions( $definitions );
+       private function getDataTypeDefinitions() {
+               return new DataTypeDefinitions( $this->getDefinitions() );
        }
 
        public function testTypeIds() {
@@ -129,4 +131,21 @@
                );
        }
 
+       public function testDataTypeDefinitions_onlySomeDataTypesEnabled() {
+               $definitions = $this->getDefinitions();
+               $defs = new DataTypeDefinitions( $definitions, array( 'bar' ) );
+
+               $this->assertSame(
+                       array( 'foo' ),
+                       $defs->getTypeIds(),
+                       'data type ids'
+               );
+
+               $this->assertSame(
+                       array( 'VT:FOO' => 
'DataTypeDefinitionsTest::getFooValueFormatter' ),
+                       $defs->getFormatterFactoryCallbacks( 
DataTypeDefinitions::PREFIXED_MODE ),
+                       'formatter factory callbacks, prefixed mode'
+               );
+       }
+
 }
diff --git a/extensions/Wikibase/repo/config/Wikibase.default.php 
b/extensions/Wikibase/repo/config/Wikibase.default.php
index 8bc11c5..5fc6239 100644
--- a/extensions/Wikibase/repo/config/Wikibase.default.php
+++ b/extensions/Wikibase/repo/config/Wikibase.default.php
@@ -123,6 +123,18 @@
                // repo and clients for multiwiki setups.
                'sharedCacheType' => $GLOBALS['wgMainCacheType'],
 
+               /**
+                * List of data types (by data type id) not enabled on the wiki.
+                * This setting is intended to aid with deployment of new data 
types
+                * or on new Wikibase installs without items and properties yet.
+                *
+                * This setting should be consistent with the corresponding 
setting on the client.
+                *
+                * WARNING: Disabling a data type after it is in use is 
dangerous
+                * and might break items.
+                */
+               'disabledDataTypes' => array(),
+
                // Special non-canonical languages and their BCP 47 mappings
                // Based on: 
https://meta.wikimedia.org/wiki/Special_language_codes
                'canonicalLanguageCodes' => array(
diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php 
b/extensions/Wikibase/repo/includes/WikibaseRepo.php
index 3297c5f..8441d89 100644
--- a/extensions/Wikibase/repo/includes/WikibaseRepo.php
+++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php
@@ -241,9 +241,14 @@
                Hooks::run( 'WikibaseRepoDataTypes', array( 
&$dataTypeDefinitions ) );
 
                if ( $instance === null ) {
+                       $settings = new SettingsArray( $wgWBRepoSettings );
+
                        $instance = new self(
-                               new SettingsArray( $wgWBRepoSettings ),
-                               new DataTypeDefinitions( $dataTypeDefinitions ),
+                               $settings,
+                               new DataTypeDefinitions(
+                                       $dataTypeDefinitions,
+                                       $settings->getSetting( 
'disabledDataTypes' )
+                               ),
                                $wgContLang
                        );
                }
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 5e1469e..ff6ecfb 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -13,9 +13,7 @@
 namespace Composer\Autoload;
 
 /**
- * ClassLoader implements a PSR-0 class loader
- *
- * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
  *
  *     $loader = new \Composer\Autoload\ClassLoader();
  *
@@ -39,6 +37,8 @@
  *
  * @author Fabien Potencier <fab...@symfony.com>
  * @author Jordi Boggiano <j.boggi...@seld.be>
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
  */
 class ClassLoader
 {
@@ -147,7 +147,7 @@
      * appending or prepending to the ones previously set for this namespace.
      *
      * @param string       $prefix  The prefix/namespace, with trailing '\\'
-     * @param array|string $paths   The PSR-0 base directories
+     * @param array|string $paths   The PSR-4 base directories
      * @param bool         $prepend Whether to prepend the directories
      *
      * @throws \InvalidArgumentException
diff --git a/vendor/composer/autoload_files.php 
b/vendor/composer/autoload_files.php
index 3da4104..0dd04ea 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -6,23 +6,23 @@
 $baseDir = dirname($vendorDir);
 
 return array(
-    $vendorDir . '/data-values/data-values/DataValues.php',
-    $vendorDir . '/data-values/interfaces/Interfaces.php',
-    $vendorDir . '/data-values/common/Common.php',
-    $vendorDir . '/wikibase/data-model/WikibaseDataModel.php',
-    $vendorDir . '/serialization/serialization/Serialization.php',
-    $vendorDir . '/data-values/javascript/DataValuesJavaScript.php',
-    $vendorDir . '/data-values/time/Time.php',
-    $vendorDir . '/data-values/number/Number.php',
-    $vendorDir . '/data-values/geo/Geo.php',
-    $vendorDir . '/diff/diff/Diff.php',
-    $vendorDir . '/wikibase/data-model-javascript/init.php',
-    $vendorDir . '/wikibase/data-model-serialization/mediawiki.php',
-    $vendorDir . '/wikibase/serialization-javascript/init.php',
-    $vendorDir . '/wikibase/javascript-api/WikibaseJavaScriptApi.php',
-    $vendorDir . '/wikibase/internal-serialization/mediawiki.php',
-    $baseDir . '/extensions/ValueView/ValueView.php',
-    $vendorDir . '/data-values/data-types/DataTypes.php',
-    $vendorDir . '/data-values/validators/Validators.php',
-    $baseDir . '/extensions/WikimediaBadges/WikimediaBadges.php',
+    '7cb394c3af2b1ae832979b0368e0da62' => $vendorDir . 
'/data-values/data-values/DataValues.php',
+    'd1715cacc3c23b16a030645514266a76' => $vendorDir . 
'/data-values/interfaces/Interfaces.php',
+    '90559502573a0d473dc66fde5c0ff7e2' => $vendorDir . 
'/data-values/common/Common.php',
+    'dc2c047038b9f5c71759f55f00aba99b' => $vendorDir . 
'/wikibase/data-model/WikibaseDataModel.php',
+    'f4c767faab43077fd89ff7cf99ffb4b8' => $vendorDir . 
'/serialization/serialization/Serialization.php',
+    '214ce90e7d14f0df3f891aa32034c535' => $vendorDir . 
'/data-values/javascript/DataValuesJavaScript.php',
+    '908a529187e4aa80293c8aa78e1ec48d' => $vendorDir . 
'/data-values/time/Time.php',
+    'c15f8000750e4e04ba559d9745044427' => $vendorDir . 
'/data-values/number/Number.php',
+    '5a494680c593293bd6035e42e2a6825c' => $vendorDir . 
'/data-values/geo/Geo.php',
+    '3ef87127dc6892a0a78f223558a0b940' => $vendorDir . '/diff/diff/Diff.php',
+    '4b37f72a623577cc8b75c6a738dc9d30' => $vendorDir . 
'/wikibase/data-model-javascript/init.php',
+    '449657c0add2acfae5f5a189e215d1ad' => $vendorDir . 
'/wikibase/data-model-serialization/mediawiki.php',
+    '3a1322766b0dbc9cf396163859b9f864' => $vendorDir . 
'/wikibase/serialization-javascript/init.php',
+    'f44e0a54bf5f0864879c4d3e46950b49' => $vendorDir . 
'/wikibase/javascript-api/WikibaseJavaScriptApi.php',
+    'e47bdf5a503f90444b98ecdcab719841' => $vendorDir . 
'/wikibase/internal-serialization/mediawiki.php',
+    '499fed5dd24a6329f26a3973b04c5440' => $baseDir . 
'/extensions/ValueView/ValueView.php',
+    'b27615ec50616984e4b07db5658aba0d' => $vendorDir . 
'/data-values/data-types/DataTypes.php',
+    '0dd9431cbbfa9ed9cb9d565d7129dbaf' => $vendorDir . 
'/data-values/validators/Validators.php',
+    '6b49d0287e368cb66263e04ca7d9699f' => $baseDir . 
'/extensions/WikimediaBadges/WikimediaBadges.php',
 );
diff --git a/vendor/composer/autoload_real.php 
b/vendor/composer/autoload_real.php
index 1e45e9c..1c9e343 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -23,16 +23,6 @@
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         
spl_autoload_unregister(array('ComposerAutoloaderInitwikidata_1_27_0_wmf_10', 
'loadClassLoader'));
 
-        $map = require __DIR__ . '/autoload_namespaces.php';
-        foreach ($map as $namespace => $path) {
-            $loader->set($namespace, $path);
-        }
-
-        $map = require __DIR__ . '/autoload_psr4.php';
-        foreach ($map as $namespace => $path) {
-            $loader->setPsr4($namespace, $path);
-        }
-
         $classMap = require __DIR__ . '/autoload_classmap.php';
         if ($classMap) {
             $loader->addClassMap($classMap);
@@ -42,15 +32,19 @@
         $loader->register(false);
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
-        foreach ($includeFiles as $file) {
-            composerRequirewikidata_1_27_0_wmf_10($file);
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequirewikidata_1_27_0_wmf_10($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequirewikidata_1_27_0_wmf_10($file)
+function composerRequirewikidata_1_27_0_wmf_10($fileIdentifier, $file)
 {
-    require $file;
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        require $file;
+
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+    }
 }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 73e1644..d9f25aa 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -772,7 +772,7 @@
         "version_normalized": "0.15.6.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/wikimedia/data-values-value-view.git";,
+            "url": "https://gerrit.wikimedia.org/r/data-values/value-view";,
             "reference": "d4620fa54d0506f3319963592f9423473deca9d2"
         },
         "dist": {
@@ -1480,12 +1480,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb"
+            "reference": "0e38d250266d929976ac5b8aec810cda2447a75e"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/06ee5284d4e0a378e40caf3498963dc576e836eb";,
-            "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0e38d250266d929976ac5b8aec810cda2447a75e";,
+            "reference": "0e38d250266d929976ac5b8aec810cda2447a75e",
             "shasum": ""
         },
         "require": {
@@ -1517,7 +1517,7 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
         },
-        "time": "2016-01-11 21:20:36",
+        "time": "2016-01-13 08:06:44",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/263857
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ief437d4bf8054bfd1b27449b0f88e586be215935
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: wmf/1.27.0-wmf.10
Gerrit-Owner: Aude <aude.w...@gmail.com>

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

Reply via email to