Merge branch '2.5'
commit
776ff2ea51
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,3 +1,12 @@
|
||||||
|
### [2.5.5] 2023-03-21
|
||||||
|
|
||||||
|
* Fixed basic auth failures resulting in infinite retry loop (#11320)
|
||||||
|
* Fixed GitHub rate limit reporting (#11366)
|
||||||
|
* Fixed InstalledVersions error in Composer 1 compatibility edge case (#11304)
|
||||||
|
* Fixed issue displaying solver problems with branch names containing `%` signs (#11359)
|
||||||
|
* Fixed race condition in cache validity detection when running Composer highly concurrently (#11375)
|
||||||
|
* Fixed various minor config command issues (#11353, #11302)
|
||||||
|
|
||||||
### [2.5.4] 2023-02-15
|
### [2.5.4] 2023-02-15
|
||||||
|
|
||||||
* Fixed extra.plugin-optional support in PluginInstaller when doing pre-install checks (#11318)
|
* Fixed extra.plugin-optional support in PluginInstaller when doing pre-install checks (#11318)
|
||||||
|
@ -1699,6 +1708,7 @@
|
||||||
|
|
||||||
* Initial release
|
* Initial release
|
||||||
|
|
||||||
|
[2.5.5]: https://github.com/composer/composer/compare/2.5.4...2.5.5
|
||||||
[2.5.4]: https://github.com/composer/composer/compare/2.5.3...2.5.4
|
[2.5.4]: https://github.com/composer/composer/compare/2.5.3...2.5.4
|
||||||
[2.5.3]: https://github.com/composer/composer/compare/2.5.2...2.5.3
|
[2.5.3]: https://github.com/composer/composer/compare/2.5.2...2.5.3
|
||||||
[2.5.2]: https://github.com/composer/composer/compare/2.5.1...2.5.2
|
[2.5.2]: https://github.com/composer/composer/compare/2.5.1...2.5.2
|
||||||
|
|
|
@ -274,8 +274,21 @@ EOT
|
||||||
// show the value if no value is provided
|
// show the value if no value is provided
|
||||||
if ([] === $input->getArgument('setting-value') && !$input->getOption('unset')) {
|
if ([] === $input->getArgument('setting-value') && !$input->getOption('unset')) {
|
||||||
$properties = self::CONFIGURABLE_PACKAGE_PROPERTIES;
|
$properties = self::CONFIGURABLE_PACKAGE_PROPERTIES;
|
||||||
|
$propertiesDefaults = [
|
||||||
|
'type' => 'library',
|
||||||
|
'description' => '',
|
||||||
|
'homepage' => '',
|
||||||
|
'minimum-stability' => 'stable',
|
||||||
|
'prefer-stable' => false,
|
||||||
|
'keywords' => [],
|
||||||
|
'license' => [],
|
||||||
|
'suggest' => [],
|
||||||
|
'extra' => [],
|
||||||
|
];
|
||||||
$rawData = $this->configFile->read();
|
$rawData = $this->configFile->read();
|
||||||
$data = $this->config->all();
|
$data = $this->config->all();
|
||||||
|
$source = $this->config->getSourceOfValue($settingKey);
|
||||||
|
|
||||||
if (Preg::isMatch('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
|
if (Preg::isMatch('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
|
||||||
if (!isset($matches[1]) || $matches[1] === '') {
|
if (!isset($matches[1]) || $matches[1] === '') {
|
||||||
$value = $data['repositories'] ?? [];
|
$value = $data['repositories'] ?? [];
|
||||||
|
@ -311,19 +324,33 @@ EOT
|
||||||
$value = $data;
|
$value = $data;
|
||||||
} elseif (isset($data['config'][$settingKey])) {
|
} elseif (isset($data['config'][$settingKey])) {
|
||||||
$value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS);
|
$value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS);
|
||||||
|
// ensure we get {} output for properties which are objects
|
||||||
|
if ($value === []) {
|
||||||
|
$schema = JsonFile::parseJson((string) file_get_contents(JsonFile::COMPOSER_SCHEMA_PATH));
|
||||||
|
if (
|
||||||
|
isset($schema['properties']['config']['properties'][$settingKey]['type'])
|
||||||
|
&& in_array('object', (array) $schema['properties']['config']['properties'][$settingKey]['type'], true)
|
||||||
|
) {
|
||||||
|
$value = new \stdClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
} elseif (isset($rawData[$settingKey]) && in_array($settingKey, $properties, true)) {
|
} elseif (isset($rawData[$settingKey]) && in_array($settingKey, $properties, true)) {
|
||||||
$value = $rawData[$settingKey];
|
$value = $rawData[$settingKey];
|
||||||
|
$source = $this->configFile->getPath();
|
||||||
|
} elseif (isset($propertiesDefaults[$settingKey])) {
|
||||||
|
$value = $propertiesDefaults[$settingKey];
|
||||||
|
$source = 'defaults';
|
||||||
} else {
|
} else {
|
||||||
throw new \RuntimeException($settingKey.' is not defined');
|
throw new \RuntimeException($settingKey.' is not defined');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($value)) {
|
if (is_array($value) || is_object($value) || is_bool($value)) {
|
||||||
$value = JsonFile::encode($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
$value = JsonFile::encode($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sourceOfConfigValue = '';
|
$sourceOfConfigValue = '';
|
||||||
if ($input->getOption('source')) {
|
if ($input->getOption('source')) {
|
||||||
$sourceOfConfigValue = ' (' . $this->config->getSourceOfValue($settingKey) . ')';
|
$sourceOfConfigValue = ' (' . $source . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->getIO()->write($value . $sourceOfConfigValue, true, IOInterface::QUIET);
|
$this->getIO()->write($value . $sourceOfConfigValue, true, IOInterface::QUIET);
|
||||||
|
|
|
@ -40,7 +40,7 @@ final class ConfigReturnTypeExtension implements DynamicMethodReturnTypeExtensio
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$schema = JsonFile::parseJson((string) file_get_contents(__DIR__.'/../../../res/composer-schema.json'));
|
$schema = JsonFile::parseJson((string) file_get_contents(JsonFile::COMPOSER_SCHEMA_PATH));
|
||||||
/**
|
/**
|
||||||
* @var string $prop
|
* @var string $prop
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
namespace Composer\Test\Json;
|
namespace Composer\Test\Json;
|
||||||
|
|
||||||
|
use Composer\Json\JsonFile;
|
||||||
use JsonSchema\Validator;
|
use JsonSchema\Validator;
|
||||||
use Composer\Test\TestCase;
|
use Composer\Test\TestCase;
|
||||||
|
|
||||||
|
@ -96,7 +97,7 @@ class ComposerSchemaTest extends TestCase
|
||||||
private function check(string $json)
|
private function check(string $json)
|
||||||
{
|
{
|
||||||
$validator = new Validator();
|
$validator = new Validator();
|
||||||
$validator->check(json_decode($json), (object) ['$ref' => 'file://' . __DIR__ . '/../../../../res/composer-schema.json']);
|
$validator->check(json_decode($json), (object) ['$ref' => 'file://' . JsonFile::COMPOSER_SCHEMA_PATH]);
|
||||||
|
|
||||||
if (!$validator->isValid()) {
|
if (!$validator->isValid()) {
|
||||||
$errors = $validator->getErrors();
|
$errors = $validator->getErrors();
|
||||||
|
|
Loading…
Reference in New Issue