1
0
Fork 0

Fix parsing of stabilities with AND/OR ops and no stability flags

pull/5238/head
Jordi Boggiano 2016-04-22 22:59:55 +01:00
parent 4ed1e88689
commit 6ce8477d04
2 changed files with 15 additions and 9 deletions

View File

@ -201,16 +201,18 @@ class RootPackageLoader extends ArrayLoader
continue;
}
// 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', $reqVersion);
if (preg_match('{^[^,\s@]+$}', $reqVersion) && 'stable' !== ($stabilityName = VersionParser::parseStability($reqVersion))) {
$name = strtolower($reqName);
$stability = $stabilities[$stabilityName];
if ((isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability) || ($minimumStability > $stability)) {
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_match('{^[^,\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;
}
$stabilityFlags[$name] = $stability;
}
}

View File

@ -44,6 +44,8 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
'zux/complex' => '~1.0,>=1.0.2@dev',
'or/op' => '^2.0@dev || ^2.0@dev',
'multi/lowest-wins' => '^2.0@rc || >=3.0@dev , ~3.5@alpha',
'or/op/without-flags' => 'dev-master || 2.0 , ~3.5-alpha',
'or/op/without-flags2' => '3.0-beta || 2.0 , ~3.5-alpha',
),
'minimum-stability' => 'alpha',
));
@ -55,6 +57,8 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
'zux/complex' => BasePackage::STABILITY_DEV,
'or/op' => BasePackage::STABILITY_DEV,
'multi/lowest-wins' => BasePackage::STABILITY_DEV,
'or/op/without-flags' => BasePackage::STABILITY_DEV,
'or/op/without-flags2' => BasePackage::STABILITY_ALPHA,
), $package->getStabilityFlags());
}