Added array_replace_recursive merge strategy
authorYuri Astrakhan <yurik@wikimedia.org>
Tue, 18 Oct 2016 05:23:56 +0000 (01:23 -0400)
committerReedy <reedy@wikimedia.org>
Mon, 24 Oct 2016 19:20:04 +0000 (19:20 +0000)
commitab224f821196f8723acbf9ff81c89d311c93a8e2
treeefc4caf23f3bf8a90133dbfdfd9f35ba19bb754d
parentfb4c96c9182506839cebc44b97e04ae628008267
Added array_replace_recursive merge strategy

For extension registry, add array_replace_recursive merge strategy,
as some extensions/configuration may prefer that to array_merge_recursive.

In some cases, configuration is merged from multiple extensions,
such as JsonConfig's $wgJsonConfigs configuration: ZeroBanner defines

"JsonZeroConfig": {
"namespace": 480,
"nsName": "Zero",
"isLocal": false,
"cacheKey": "1"
}

and mobile.php overrides it with
$wgJsonConfigs['JsonZeroConfig']['isLocal'] = false;
$wgJsonConfigs['JsonZeroConfig']['remote'] = [
'url' => 'https://zero.wikimedia.org/w/api.php',
'username' => $wmgZeroPortalApiUserName,
'password' => $wmgZeroPortalApiPassword,
];

Having identical value 'isLocal' would be converted into an array
if array_merge_recursive is used, but the replace strategy fixes it.

Change-Id: Ica6ddd0ae76f23e60de9b6235c6e2a3f2754a95d
docs/extension.schema.json
docs/extension.schema.v1.json
includes/registration/ExtensionRegistry.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php