function RootPackageLoader::extractStabilityFlags
@internal
@phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags @phpstan-return array<string, BasePackage::STABILITY_*>
Parameters
array<string, string> $requires:
array<string, int> $stabilityFlags:
key-of<BasePackage::STABILITIES> $minimumStability:
Return value
array<string, int>
4 calls to RootPackageLoader::extractStabilityFlags()
- RequireCommand::doUpdate in vendor/
composer/ composer/ src/ Composer/ Command/ RequireCommand.php - RequireCommand::updateRequirementsAfterResolution in vendor/
composer/ composer/ src/ Composer/ Command/ RequireCommand.php - RootPackageLoader::load in vendor/
composer/ composer/ src/ Composer/ Package/ Loader/ RootPackageLoader.php - @inheritDoc
- UpdateCommand::execute in vendor/
composer/ composer/ src/ Composer/ Command/ UpdateCommand.php - Executes the current command.
File
-
vendor/
composer/ composer/ src/ Composer/ Package/ Loader/ RootPackageLoader.php, line 237
Class
- RootPackageLoader
- ArrayLoader built for the sole purpose of loading the root package
Namespace
Composer\Package\LoaderCode
public static function extractStabilityFlags(array $requires, string $minimumStability, array $stabilityFlags) : array {
$stabilities = BasePackage::STABILITIES;
$minimumStability = $stabilities[$minimumStability];
foreach ($requires as $reqName => $reqVersion) {
$constraints = [];
// extract all sub-constraints in case it is an OR/AND multi-constraint
$orSplit = Preg::split('{\\s*\\|\\|?\\s*}', trim($reqVersion));
foreach ($orSplit as $orConstraint) {
$andSplit = Preg::split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $orConstraint);
foreach ($andSplit as $andConstraint) {
$constraints[] = $andConstraint;
}
}
// parse explicit stability flags to the most unstable
$matched = false;
foreach ($constraints as $constraint) {
if (Preg::isMatchStrictGroups('{^[^@]*?@(' . implode('|', array_keys($stabilities)) . ')$}i', $constraint, $match)) {
$name = strtolower($reqName);
$stability = $stabilities[VersionParser::normalizeStability($match[1])];
if (isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability) {
continue;
}
$stabilityFlags[$name] = $stability;
$matched = true;
}
}
if ($matched) {
continue;
}
foreach ($constraints as $constraint) {
// infer flags for requirements that have an explicit -dev or -beta version specified but only
// for those that are more unstable than the minimumStability or existing flags
$reqVersion = Preg::replace('{^([^,\\s@]+) as .+$}', '$1', $constraint);
if (Preg::isMatch('{^[^,\\s@]+$}', $reqVersion) && 'stable' !== ($stabilityName = VersionParser::parseStability($reqVersion))) {
$name = strtolower($reqName);
$stability = $stabilities[$stabilityName];
if (isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability || $minimumStability > $stability) {
continue;
}
$stabilityFlags[$name] = $stability;
}
}
}
return $stabilityFlags;
}