Refactor the BasePackage::$stabilities into a constant
parent
07aee7ea8e
commit
685add70ec
|
@ -297,16 +297,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/semver",
|
"name": "composer/semver",
|
||||||
"version": "3.4.0",
|
"version": "3.4.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/composer/semver.git",
|
"url": "https://github.com/composer/semver.git",
|
||||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
|
"reference": "8536c1b9103405bcbd310c69e7a5739a1c2b1f0b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
|
"url": "https://api.github.com/repos/composer/semver/zipball/8536c1b9103405bcbd310c69e7a5739a1c2b1f0b",
|
||||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
|
"reference": "8536c1b9103405bcbd310c69e7a5739a1c2b1f0b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -358,7 +358,7 @@
|
||||||
"support": {
|
"support": {
|
||||||
"irc": "ircs://irc.libera.chat:6697/composer",
|
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||||
"issues": "https://github.com/composer/semver/issues",
|
"issues": "https://github.com/composer/semver/issues",
|
||||||
"source": "https://github.com/composer/semver/tree/3.4.0"
|
"source": "https://github.com/composer/semver/tree/3.4.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -374,7 +374,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-08-31T09:50:34+00:00"
|
"time": "2024-07-12T09:13:09+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/spdx-licenses",
|
"name": "composer/spdx-licenses",
|
||||||
|
@ -760,23 +760,23 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seld/jsonlint",
|
"name": "seld/jsonlint",
|
||||||
"version": "1.10.2",
|
"version": "1.11.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Seldaek/jsonlint.git",
|
"url": "https://github.com/Seldaek/jsonlint.git",
|
||||||
"reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259"
|
"reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259",
|
"url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2",
|
||||||
"reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259",
|
"reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.3 || ^7.0 || ^8.0"
|
"php": "^5.3 || ^7.0 || ^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpstan/phpstan": "^1.5",
|
"phpstan/phpstan": "^1.11",
|
||||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
|
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
|
||||||
},
|
},
|
||||||
"bin": [
|
"bin": [
|
||||||
|
@ -808,7 +808,7 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/Seldaek/jsonlint/issues",
|
"issues": "https://github.com/Seldaek/jsonlint/issues",
|
||||||
"source": "https://github.com/Seldaek/jsonlint/tree/1.10.2"
|
"source": "https://github.com/Seldaek/jsonlint/tree/1.11.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -820,7 +820,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-02-07T12:57:50+00:00"
|
"time": "2024-07-11T14:55:45+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seld/phar-utils",
|
"name": "seld/phar-utils",
|
||||||
|
|
|
@ -169,7 +169,7 @@ EOT
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($version !== null && Preg::isMatchStrictGroups('{@(stable|RC|beta|alpha|dev)$}i', $version, $match)) {
|
if ($version !== null && Preg::isMatchStrictGroups('{@(stable|RC|beta|alpha|dev)$}i', $version, $match)) {
|
||||||
$minStability = $match[1];
|
$minStability = VersionParser::normalizeStability($match[1]);
|
||||||
$version = (string) substr($version, 0, -strlen($match[0]));
|
$version = (string) substr($version, 0, -strlen($match[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -664,7 +664,7 @@ EOT
|
||||||
}],
|
}],
|
||||||
'minimum-stability' => [
|
'minimum-stability' => [
|
||||||
static function ($val): bool {
|
static function ($val): bool {
|
||||||
return isset(BasePackage::$stabilities[VersionParser::normalizeStability($val)]);
|
return isset(BasePackage::STABILITIES[VersionParser::normalizeStability($val)]);
|
||||||
},
|
},
|
||||||
static function ($val): string {
|
static function ($val): string {
|
||||||
return VersionParser::normalizeStability($val);
|
return VersionParser::normalizeStability($val);
|
||||||
|
|
|
@ -375,7 +375,7 @@ EOT
|
||||||
if (null === $stability) {
|
if (null === $stability) {
|
||||||
if (null === $packageVersion) {
|
if (null === $packageVersion) {
|
||||||
$stability = 'stable';
|
$stability = 'stable';
|
||||||
} elseif (Preg::isMatchStrictGroups('{^[^,\s]*?@('.implode('|', array_keys(BasePackage::$stabilities)).')$}i', $packageVersion, $match)) {
|
} elseif (Preg::isMatchStrictGroups('{^[^,\s]*?@('.implode('|', array_keys(BasePackage::STABILITIES)).')$}i', $packageVersion, $match)) {
|
||||||
$stability = $match[1];
|
$stability = $match[1];
|
||||||
} else {
|
} else {
|
||||||
$stability = VersionParser::parseStability($packageVersion);
|
$stability = VersionParser::parseStability($packageVersion);
|
||||||
|
@ -384,8 +384,8 @@ EOT
|
||||||
|
|
||||||
$stability = VersionParser::normalizeStability($stability);
|
$stability = VersionParser::normalizeStability($stability);
|
||||||
|
|
||||||
if (!isset(BasePackage::$stabilities[$stability])) {
|
if (!isset(BasePackage::STABILITIES[$stability])) {
|
||||||
throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::$stabilities)));
|
throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::STABILITIES)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$composer = $this->createComposerInstance($input, $io, $config->all(), $disablePlugins, $disableScripts);
|
$composer = $this->createComposerInstance($input, $io, $config->all(), $disablePlugins, $disableScripts);
|
||||||
|
|
|
@ -61,7 +61,7 @@ class InitCommand extends BaseCommand
|
||||||
new InputOption('homepage', null, InputOption::VALUE_REQUIRED, 'Homepage of package'),
|
new InputOption('homepage', null, InputOption::VALUE_REQUIRED, 'Homepage of package'),
|
||||||
new InputOption('require', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"', null, $this->suggestAvailablePackageInclPlatform()),
|
new InputOption('require', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"', null, $this->suggestAvailablePackageInclPlatform()),
|
||||||
new InputOption('require-dev', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require for development with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"', null, $this->suggestAvailablePackageInclPlatform()),
|
new InputOption('require-dev', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Package to require for development with a version constraint, e.g. foo/bar:1.0.0 or foo/bar=1.0.0 or "foo/bar 1.0.0"', null, $this->suggestAvailablePackageInclPlatform()),
|
||||||
new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum stability (empty or one of: '.implode(', ', array_keys(BasePackage::$stabilities)).')'),
|
new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum stability (empty or one of: '.implode(', ', array_keys(BasePackage::STABILITIES)).')'),
|
||||||
new InputOption('license', 'l', InputOption::VALUE_REQUIRED, 'License of package'),
|
new InputOption('license', 'l', InputOption::VALUE_REQUIRED, 'License of package'),
|
||||||
new InputOption('repository', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Add custom repositories, either by URL or using JSON arrays'),
|
new InputOption('repository', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Add custom repositories, either by URL or using JSON arrays'),
|
||||||
new InputOption('autoload', 'a', InputOption::VALUE_REQUIRED, 'Add PSR-4 autoload mapping. Maps your package\'s namespace to the provided directory. (Expects a relative path, e.g. src/)'),
|
new InputOption('autoload', 'a', InputOption::VALUE_REQUIRED, 'Add PSR-4 autoload mapping. Maps your package\'s namespace to the provided directory. (Expects a relative path, e.g. src/)'),
|
||||||
|
@ -364,10 +364,10 @@ EOT
|
||||||
return $minimumStability;
|
return $minimumStability;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset(BasePackage::$stabilities[$value])) {
|
if (!isset(BasePackage::STABILITIES[$value])) {
|
||||||
throw new \InvalidArgumentException(
|
throw new \InvalidArgumentException(
|
||||||
'Invalid minimum stability "'.$value.'". Must be empty or one of: '.
|
'Invalid minimum stability "'.$value.'". Must be empty or one of: '.
|
||||||
implode(', ', array_keys(BasePackage::$stabilities))
|
implode(', ', array_keys(BasePackage::STABILITIES))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ use Composer\Factory;
|
||||||
use Composer\Filter\PlatformRequirementFilter\IgnoreAllPlatformRequirementFilter;
|
use Composer\Filter\PlatformRequirementFilter\IgnoreAllPlatformRequirementFilter;
|
||||||
use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory;
|
use Composer\Filter\PlatformRequirementFilter\PlatformRequirementFilterFactory;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
use Composer\Package\BasePackage;
|
||||||
use Composer\Package\CompletePackageInterface;
|
use Composer\Package\CompletePackageInterface;
|
||||||
use Composer\Package\PackageInterface;
|
use Composer\Package\PackageInterface;
|
||||||
use Composer\Package\Version\VersionParser;
|
use Composer\Package\Version\VersionParser;
|
||||||
|
@ -52,6 +53,9 @@ trait PackageDiscoveryTrait
|
||||||
return $this->repos;
|
return $this->repos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key-of<BasePackage::STABILITIES>|null $minimumStability
|
||||||
|
*/
|
||||||
private function getRepositorySet(InputInterface $input, ?string $minimumStability = null): RepositorySet
|
private function getRepositorySet(InputInterface $input, ?string $minimumStability = null): RepositorySet
|
||||||
{
|
{
|
||||||
$key = $minimumStability ?? 'default';
|
$key = $minimumStability ?? 'default';
|
||||||
|
@ -64,6 +68,9 @@ trait PackageDiscoveryTrait
|
||||||
return $this->repositorySets[$key];
|
return $this->repositorySets[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return key-of<BasePackage::STABILITIES>
|
||||||
|
*/
|
||||||
private function getMinimumStability(InputInterface $input): string
|
private function getMinimumStability(InputInterface $input): string
|
||||||
{
|
{
|
||||||
if ($input->hasOption('stability')) { // @phpstan-ignore-line as InitCommand does have this option but not all classes using this trait do
|
if ($input->hasOption('stability')) { // @phpstan-ignore-line as InitCommand does have this option but not all classes using this trait do
|
||||||
|
|
|
@ -1454,7 +1454,7 @@ EOT
|
||||||
$stability = $composer->getPackage()->getMinimumStability();
|
$stability = $composer->getPackage()->getMinimumStability();
|
||||||
$flags = $composer->getPackage()->getStabilityFlags();
|
$flags = $composer->getPackage()->getStabilityFlags();
|
||||||
if (isset($flags[$name])) {
|
if (isset($flags[$name])) {
|
||||||
$stability = array_search($flags[$name], BasePackage::$stabilities, true);
|
$stability = array_search($flags[$name], BasePackage::STABILITIES, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$bestStability = $stability;
|
$bestStability = $stability;
|
||||||
|
|
|
@ -53,7 +53,7 @@ class DefaultPolicy implements PolicyInterface
|
||||||
public function versionCompare(PackageInterface $a, PackageInterface $b, string $operator): bool
|
public function versionCompare(PackageInterface $a, PackageInterface $b, string $operator): bool
|
||||||
{
|
{
|
||||||
if ($this->preferStable && ($stabA = $a->getStability()) !== ($stabB = $b->getStability())) {
|
if ($this->preferStable && ($stabA = $a->getStability()) !== ($stabB = $b->getStability())) {
|
||||||
return BasePackage::$stabilities[$stabA] < BasePackage::$stabilities[$stabB];
|
return BasePackage::STABILITIES[$stabA] < BasePackage::STABILITIES[$stabB];
|
||||||
}
|
}
|
||||||
|
|
||||||
// dev versions need to be compared as branches via matchSpecific's special treatment, the rest can be optimized with compiling matcher
|
// dev versions need to be compared as branches via matchSpecific's special treatment, the rest can be optimized with compiling matcher
|
||||||
|
|
|
@ -40,7 +40,7 @@ class PoolBuilder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var int[]
|
* @var int[]
|
||||||
* @phpstan-var array<string, BasePackage::STABILITY_*>
|
* @phpstan-var array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*>
|
||||||
*/
|
*/
|
||||||
private $acceptableStabilities;
|
private $acceptableStabilities;
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +153,7 @@ class PoolBuilder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int[] $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
* @param int[] $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*> $acceptableStabilities
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*> $acceptableStabilities
|
||||||
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
||||||
* @param array[] $rootAliases
|
* @param array[] $rootAliases
|
||||||
|
|
|
@ -910,7 +910,7 @@ class Installer
|
||||||
$this->fixedRootPackage->setRequires([]);
|
$this->fixedRootPackage->setRequires([]);
|
||||||
$this->fixedRootPackage->setDevRequires([]);
|
$this->fixedRootPackage->setDevRequires([]);
|
||||||
|
|
||||||
$stabilityFlags[$this->package->getName()] = BasePackage::$stabilities[VersionParser::parseStability($this->package->getVersion())];
|
$stabilityFlags[$this->package->getName()] = BasePackage::STABILITIES[VersionParser::parseStability($this->package->getVersion())];
|
||||||
|
|
||||||
$repositorySet = new RepositorySet($minimumStability, $stabilityFlags, $rootAliases, $this->package->getReferences(), $rootRequires, $this->temporaryConstraints);
|
$repositorySet = new RepositorySet($minimumStability, $stabilityFlags, $rootAliases, $this->package->getReferences(), $rootRequires, $this->temporaryConstraints);
|
||||||
$repositorySet->addRepository(new RootPackageRepository($this->fixedRootPackage));
|
$repositorySet->addRepository(new RootPackageRepository($this->fixedRootPackage));
|
||||||
|
|
|
@ -40,8 +40,7 @@ abstract class BasePackage implements PackageInterface
|
||||||
public const STABILITY_ALPHA = 15;
|
public const STABILITY_ALPHA = 15;
|
||||||
public const STABILITY_DEV = 20;
|
public const STABILITY_DEV = 20;
|
||||||
|
|
||||||
/** @var array<string, self::STABILITY_*> */
|
public const STABILITIES = [
|
||||||
public static $stabilities = [
|
|
||||||
'stable' => self::STABILITY_STABLE,
|
'stable' => self::STABILITY_STABLE,
|
||||||
'RC' => self::STABILITY_RC,
|
'RC' => self::STABILITY_RC,
|
||||||
'beta' => self::STABILITY_BETA,
|
'beta' => self::STABILITY_BETA,
|
||||||
|
@ -49,6 +48,14 @@ abstract class BasePackage implements PackageInterface
|
||||||
'dev' => self::STABILITY_DEV,
|
'dev' => self::STABILITY_DEV,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @readonly
|
||||||
|
* @var array<key-of<BasePackage::STABILITIES>, self::STABILITY_*>
|
||||||
|
* @phpstan-ignore property.readOnlyByPhpDocDefaultValue
|
||||||
|
*/
|
||||||
|
public static $stabilities = self::STABILITIES;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* READ-ONLY: The package id, public for fast access in dependency solver
|
* READ-ONLY: The package id, public for fast access in dependency solver
|
||||||
* @var int
|
* @var int
|
||||||
|
@ -234,7 +241,7 @@ abstract class BasePackage implements PackageInterface
|
||||||
*/
|
*/
|
||||||
public function getStabilityPriority(): int
|
public function getStabilityPriority(): int
|
||||||
{
|
{
|
||||||
return self::$stabilities[$this->getStability()];
|
return self::STABILITIES[$this->getStability()];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __clone()
|
public function __clone()
|
||||||
|
|
|
@ -227,6 +227,7 @@ class RootPackageLoader extends ArrayLoader
|
||||||
*
|
*
|
||||||
* @param array<string, string> $requires
|
* @param array<string, string> $requires
|
||||||
* @param array<string, int> $stabilityFlags
|
* @param array<string, int> $stabilityFlags
|
||||||
|
* @param key-of<BasePackage::STABILITIES> $minimumStability
|
||||||
*
|
*
|
||||||
* @return array<string, int>
|
* @return array<string, int>
|
||||||
*
|
*
|
||||||
|
@ -235,8 +236,7 @@ class RootPackageLoader extends ArrayLoader
|
||||||
*/
|
*/
|
||||||
public static function extractStabilityFlags(array $requires, string $minimumStability, array $stabilityFlags): array
|
public static function extractStabilityFlags(array $requires, string $minimumStability, array $stabilityFlags): array
|
||||||
{
|
{
|
||||||
$stabilities = BasePackage::$stabilities;
|
$stabilities = BasePackage::STABILITIES;
|
||||||
/** @var int $minimumStability */
|
|
||||||
$minimumStability = $stabilities[$minimumStability];
|
$minimumStability = $stabilities[$minimumStability];
|
||||||
foreach ($requires as $reqName => $reqVersion) {
|
foreach ($requires as $reqName => $reqVersion) {
|
||||||
$constraints = [];
|
$constraints = [];
|
||||||
|
|
|
@ -323,8 +323,8 @@ class ValidatingArrayLoader implements LoaderInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->validateString('minimum-stability') && isset($this->config['minimum-stability'])) {
|
if ($this->validateString('minimum-stability') && isset($this->config['minimum-stability'])) {
|
||||||
if (!isset(BasePackage::$stabilities[strtolower($this->config['minimum-stability'])]) && $this->config['minimum-stability'] !== 'RC') {
|
if (!isset(BasePackage::STABILITIES[strtolower($this->config['minimum-stability'])]) && $this->config['minimum-stability'] !== 'RC') {
|
||||||
$this->errors[] = 'minimum-stability : invalid value ('.$this->config['minimum-stability'].'), must be one of '.implode(', ', array_keys(BasePackage::$stabilities));
|
$this->errors[] = 'minimum-stability : invalid value ('.$this->config['minimum-stability'].'), must be one of '.implode(', ', array_keys(BasePackage::STABILITIES));
|
||||||
unset($this->config['minimum-stability']);
|
unset($this->config['minimum-stability']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,6 +247,9 @@ class Locker
|
||||||
return $requirements;
|
return $requirements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return key-of<BasePackage::STABILITIES>
|
||||||
|
*/
|
||||||
public function getMinimumStability(): string
|
public function getMinimumStability(): string
|
||||||
{
|
{
|
||||||
$lockData = $this->getLockData();
|
$lockData = $this->getLockData();
|
||||||
|
|
|
@ -21,7 +21,7 @@ class RootPackage extends CompletePackage implements RootPackageInterface
|
||||||
{
|
{
|
||||||
public const DEFAULT_PRETTY_VERSION = '1.0.0+no-version-set';
|
public const DEFAULT_PRETTY_VERSION = '1.0.0+no-version-set';
|
||||||
|
|
||||||
/** @var string */
|
/** @var key-of<BasePackage::STABILITIES> */
|
||||||
protected $minimumStability = 'stable';
|
protected $minimumStability = 'stable';
|
||||||
/** @var bool */
|
/** @var bool */
|
||||||
protected $preferStable = false;
|
protected $preferStable = false;
|
||||||
|
|
|
@ -33,6 +33,8 @@ interface RootPackageInterface extends CompletePackageInterface
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the minimum stability of the package
|
* Returns the minimum stability of the package
|
||||||
|
*
|
||||||
|
* @return key-of<BasePackage::STABILITIES>
|
||||||
*/
|
*/
|
||||||
public function getMinimumStability(): string;
|
public function getMinimumStability(): string;
|
||||||
|
|
||||||
|
@ -120,12 +122,14 @@ interface RootPackageInterface extends CompletePackageInterface
|
||||||
/**
|
/**
|
||||||
* Set the stabilityFlags
|
* Set the stabilityFlags
|
||||||
*
|
*
|
||||||
* @param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
||||||
*/
|
*/
|
||||||
public function setStabilityFlags(array $stabilityFlags): void;
|
public function setStabilityFlags(array $stabilityFlags): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the minimumStability
|
* Set the minimumStability
|
||||||
|
*
|
||||||
|
* @phpstan-param key-of<BasePackage::STABILITIES> $minimumStability
|
||||||
*/
|
*/
|
||||||
public function setMinimumStability(string $minimumStability): void;
|
public function setMinimumStability(string $minimumStability): void;
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,11 @@ class StabilityFilter
|
||||||
* Checks if any of the provided package names in the given stability match the configured acceptable stability and flags
|
* Checks if any of the provided package names in the given stability match the configured acceptable stability and flags
|
||||||
*
|
*
|
||||||
* @param int[] $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
* @param int[] $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*> $acceptableStabilities
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*> $acceptableStabilities
|
||||||
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
||||||
* @param string[] $names The package name(s) to check for stability flags
|
* @param string[] $names The package name(s) to check for stability flags
|
||||||
* @param string $stability one of 'stable', 'RC', 'beta', 'alpha' or 'dev'
|
* @param key-of<BasePackage::STABILITIES> $stability one of 'stable', 'RC', 'beta', 'alpha' or 'dev'
|
||||||
* @return bool true if any package name is acceptable
|
* @return bool true if any package name is acceptable
|
||||||
*/
|
*/
|
||||||
public static function isPackageAcceptable(array $acceptableStabilities, array $stabilityFlags, array $names, string $stability): bool
|
public static function isPackageAcceptable(array $acceptableStabilities, array $stabilityFlags, array $names, string $stability): bool
|
||||||
|
@ -35,7 +35,7 @@ class StabilityFilter
|
||||||
foreach ($names as $name) {
|
foreach ($names as $name) {
|
||||||
// allow if package matches the package-specific stability flag
|
// allow if package matches the package-specific stability flag
|
||||||
if (isset($stabilityFlags[$name])) {
|
if (isset($stabilityFlags[$name])) {
|
||||||
if (BasePackage::$stabilities[$stability] <= $stabilityFlags[$name]) {
|
if (BasePackage::STABILITIES[$stability] <= $stabilityFlags[$name]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} elseif (isset($acceptableStabilities[$stability])) {
|
} elseif (isset($acceptableStabilities[$stability])) {
|
||||||
|
|
|
@ -71,7 +71,7 @@ class VersionSelector
|
||||||
*/
|
*/
|
||||||
public function findBestCandidate(string $packageName, ?string $targetPackageVersion = null, string $preferredStability = 'stable', $platformRequirementFilter = null, int $repoSetFlags = 0, ?IOInterface $io = null, $showWarnings = true)
|
public function findBestCandidate(string $packageName, ?string $targetPackageVersion = null, string $preferredStability = 'stable', $platformRequirementFilter = null, int $repoSetFlags = 0, ?IOInterface $io = null, $showWarnings = true)
|
||||||
{
|
{
|
||||||
if (!isset(BasePackage::$stabilities[$preferredStability])) {
|
if (!isset(BasePackage::STABILITIES[$preferredStability])) {
|
||||||
// If you get this, maybe you are still relying on the Composer 1.x signature where the 3rd arg was the php version
|
// If you get this, maybe you are still relying on the Composer 1.x signature where the 3rd arg was the php version
|
||||||
throw new \UnexpectedValueException('Expected a valid stability name as 3rd argument, got '.$preferredStability);
|
throw new \UnexpectedValueException('Expected a valid stability name as 3rd argument, got '.$preferredStability);
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ class VersionSelector
|
||||||
$constraint = $targetPackageVersion ? $this->getParser()->parseConstraints($targetPackageVersion) : null;
|
$constraint = $targetPackageVersion ? $this->getParser()->parseConstraints($targetPackageVersion) : null;
|
||||||
$candidates = $this->repositorySet->findPackages(strtolower($packageName), $constraint, $repoSetFlags);
|
$candidates = $this->repositorySet->findPackages(strtolower($packageName), $constraint, $repoSetFlags);
|
||||||
|
|
||||||
$minPriority = BasePackage::$stabilities[$preferredStability];
|
$minPriority = BasePackage::STABILITIES[$preferredStability];
|
||||||
usort($candidates, static function (PackageInterface $a, PackageInterface $b) use ($minPriority) {
|
usort($candidates, static function (PackageInterface $a, PackageInterface $b) use ($minPriority) {
|
||||||
$aPriority = $a->getStabilityPriority();
|
$aPriority = $a->getStabilityPriority();
|
||||||
$bPriority = $b->getStabilityPriority();
|
$bPriority = $b->getStabilityPriority();
|
||||||
|
|
|
@ -827,7 +827,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
/**
|
/**
|
||||||
* @param string $name package name
|
* @param string $name package name
|
||||||
* @param array<string, int>|null $acceptableStabilities
|
* @param array<string, int>|null $acceptableStabilities
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $acceptableStabilities
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*>|null $acceptableStabilities
|
||||||
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
||||||
* @param array<string, array<string, PackageInterface>> $alreadyLoaded
|
* @param array<string, array<string, PackageInterface>> $alreadyLoaded
|
||||||
|
@ -997,7 +997,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
* @param array<string, ConstraintInterface|null> $packageNames array of package name => ConstraintInterface|null - if a constraint is provided, only
|
* @param array<string, ConstraintInterface|null> $packageNames array of package name => ConstraintInterface|null - if a constraint is provided, only
|
||||||
* packages matching it will be loaded
|
* packages matching it will be loaded
|
||||||
* @param array<string, int>|null $acceptableStabilities
|
* @param array<string, int>|null $acceptableStabilities
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $acceptableStabilities
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*>|null $acceptableStabilities
|
||||||
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
||||||
* @param array<string, array<string, PackageInterface>> $alreadyLoaded
|
* @param array<string, array<string, PackageInterface>> $alreadyLoaded
|
||||||
|
@ -1129,7 +1129,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
|
||||||
* @param string $name package name (must be lowercased already)
|
* @param string $name package name (must be lowercased already)
|
||||||
* @param array<string, mixed> $versionData
|
* @param array<string, mixed> $versionData
|
||||||
* @param array<string, int>|null $acceptableStabilities
|
* @param array<string, int>|null $acceptableStabilities
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $acceptableStabilities
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*>|null $acceptableStabilities
|
||||||
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param array<string, int>|null $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*>|null $stabilityFlags
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -72,12 +72,13 @@ interface RepositoryInterface extends \Countable
|
||||||
* - The namesFound returned are names which should be considered as canonically found in this repository, that should not be looked up in any further lower priority repositories
|
* - The namesFound returned are names which should be considered as canonically found in this repository, that should not be looked up in any further lower priority repositories
|
||||||
*
|
*
|
||||||
* @param ConstraintInterface[] $packageNameMap package names pointing to constraints
|
* @param ConstraintInterface[] $packageNameMap package names pointing to constraints
|
||||||
* @param array<string, BasePackage::STABILITY_*> $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
* @param array<string, int> $acceptableStabilities array of stability => BasePackage::STABILITY_* value
|
||||||
* @param array<string, BasePackage::STABILITY_*> $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param array<string, BasePackage::STABILITY_*> $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @param array<string, array<string, PackageInterface>> $alreadyLoaded an array of package name => package version => package
|
* @param array<string, array<string, PackageInterface>> $alreadyLoaded an array of package name => package version => package
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
|
* @phpstan-param array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*> $acceptableStabilities
|
||||||
* @phpstan-param array<string, ConstraintInterface|null> $packageNameMap
|
* @phpstan-param array<string, ConstraintInterface|null> $packageNameMap
|
||||||
* @phpstan-return array{namesFound: array<string>, packages: array<BasePackage>}
|
* @phpstan-return array{namesFound: array<string>, packages: array<BasePackage>}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -65,7 +65,7 @@ class RepositorySet
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int[] array of stability => BasePackage::STABILITY_* value
|
* @var int[] array of stability => BasePackage::STABILITY_* value
|
||||||
* @phpstan-var array<string, BasePackage::STABILITY_*>
|
* @phpstan-var array<key-of<BasePackage::STABILITIES>, BasePackage::STABILITY_*>
|
||||||
*/
|
*/
|
||||||
private $acceptableStabilities;
|
private $acceptableStabilities;
|
||||||
|
|
||||||
|
@ -96,6 +96,7 @@ class RepositorySet
|
||||||
* passing minimumStability is all you need to worry about. The rest is for advanced pool creation including
|
* passing minimumStability is all you need to worry about. The rest is for advanced pool creation including
|
||||||
* aliases, pinned references and other special cases.
|
* aliases, pinned references and other special cases.
|
||||||
*
|
*
|
||||||
|
* @param key-of<BasePackage::STABILITIES> $minimumStability
|
||||||
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
* @param int[] $stabilityFlags an array of package name => BasePackage::STABILITY_* value
|
||||||
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
* @phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags
|
||||||
* @param array[] $rootAliases
|
* @param array[] $rootAliases
|
||||||
|
@ -112,8 +113,8 @@ class RepositorySet
|
||||||
$this->rootReferences = $rootReferences;
|
$this->rootReferences = $rootReferences;
|
||||||
|
|
||||||
$this->acceptableStabilities = [];
|
$this->acceptableStabilities = [];
|
||||||
foreach (BasePackage::$stabilities as $stability => $value) {
|
foreach (BasePackage::STABILITIES as $stability => $value) {
|
||||||
if ($value <= BasePackage::$stabilities[$minimumStability]) {
|
if ($value <= BasePackage::STABILITIES[$minimumStability]) {
|
||||||
$this->acceptableStabilities[$stability] = $value;
|
$this->acceptableStabilities[$stability] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -195,7 +196,7 @@ class RepositorySet
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->repositories as $repository) {
|
foreach ($this->repositories as $repository) {
|
||||||
$result = $repository->loadPackages([$name => $constraint], $ignoreStability ? BasePackage::$stabilities : $this->acceptableStabilities, $ignoreStability ? [] : $this->stabilityFlags);
|
$result = $repository->loadPackages([$name => $constraint], $ignoreStability ? BasePackage::STABILITIES : $this->acceptableStabilities, $ignoreStability ? [] : $this->stabilityFlags);
|
||||||
|
|
||||||
$packages[] = $result['packages'];
|
$packages[] = $result['packages'];
|
||||||
foreach ($result['namesFound'] as $nameFound) {
|
foreach ($result['namesFound'] as $nameFound) {
|
||||||
|
@ -300,8 +301,8 @@ class RepositorySet
|
||||||
/**
|
/**
|
||||||
* Check for each given package name whether it would be accepted by this RepositorySet in the given $stability
|
* Check for each given package name whether it would be accepted by this RepositorySet in the given $stability
|
||||||
*
|
*
|
||||||
* @param string[] $names
|
* @param string[] $names
|
||||||
* @param string $stability one of 'stable', 'RC', 'beta', 'alpha' or 'dev'
|
* @param key-of<BasePackage::STABILITIES> $stability one of 'stable', 'RC', 'beta', 'alpha' or 'dev'
|
||||||
*/
|
*/
|
||||||
public function isPackageAcceptable(array $names, string $stability): bool
|
public function isPackageAcceptable(array $names, string $stability): bool
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,7 +50,10 @@ class PoolBuilderTest extends TestCase
|
||||||
$stabilityFlags = !empty($root['stability-flags']) ? $root['stability-flags'] : [];
|
$stabilityFlags = !empty($root['stability-flags']) ? $root['stability-flags'] : [];
|
||||||
$rootReferences = !empty($root['references']) ? $root['references'] : [];
|
$rootReferences = !empty($root['references']) ? $root['references'] : [];
|
||||||
$stabilityFlags = array_map(static function ($stability): int {
|
$stabilityFlags = array_map(static function ($stability): int {
|
||||||
return BasePackage::$stabilities[$stability];
|
if (!isset(BasePackage::STABILITIES[$stability])) {
|
||||||
|
throw new \LogicException('Invalid stability given: '.$stability);
|
||||||
|
}
|
||||||
|
return BasePackage::STABILITIES[$stability];
|
||||||
}, $stabilityFlags);
|
}, $stabilityFlags);
|
||||||
|
|
||||||
$parser = new VersionParser();
|
$parser = new VersionParser();
|
||||||
|
|
|
@ -86,7 +86,7 @@ class FilterRepositoryTest extends TestCase
|
||||||
public function testCanonicalDefaultTrue(): void
|
public function testCanonicalDefaultTrue(): void
|
||||||
{
|
{
|
||||||
$repo = new FilterRepository($this->arrayRepo, []);
|
$repo = new FilterRepository($this->arrayRepo, []);
|
||||||
$result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::$stabilities, []);
|
$result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::STABILITIES, []);
|
||||||
self::assertCount(1, $result['packages']);
|
self::assertCount(1, $result['packages']);
|
||||||
self::assertCount(1, $result['namesFound']);
|
self::assertCount(1, $result['namesFound']);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ class FilterRepositoryTest extends TestCase
|
||||||
public function testNonCanonical(): void
|
public function testNonCanonical(): void
|
||||||
{
|
{
|
||||||
$repo = new FilterRepository($this->arrayRepo, ['canonical' => false]);
|
$repo = new FilterRepository($this->arrayRepo, ['canonical' => false]);
|
||||||
$result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::$stabilities, []);
|
$result = $repo->loadPackages(['foo/aaa' => new MatchAllConstraint], BasePackage::STABILITIES, []);
|
||||||
self::assertCount(1, $result['packages']);
|
self::assertCount(1, $result['packages']);
|
||||||
self::assertCount(0, $result['namesFound']);
|
self::assertCount(0, $result['namesFound']);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue