Skip to content

Commit

Permalink
Allow recovery from foobar-dev as dev-foobar, and handle aliases at c…
Browse files Browse the repository at this point in the history
…onstraint level already
  • Loading branch information
Seldaek committed Sep 9, 2020
1 parent 7067a2f commit 34052c6
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/VersionParser.php
Expand Up @@ -301,6 +301,11 @@ public function parseConstraints($constraints)
*/
private function parseConstraint($constraint)
{
// strip off aliasing
if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) {
$constraint = $match[1];
}

// strip @stability flags, and keep it for later use
if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) {
$constraint = '' !== $match[1] ? $match[1] : '*';
Expand Down Expand Up @@ -480,7 +485,16 @@ private function parseConstraint($constraint)
// Basic Comparators
if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
try {
$version = $this->normalize($matches[2]);
try {
$version = $this->normalize($matches[2]);
} catch (\UnexpectedValueException $e) {
// recover from an invalid constraint like foobar-dev which should be dev-foobar
if (substr($matches[2], -4) === '-dev') {
$version = $this->normalize('dev-'.substr($matches[2], 0, -4));
} else {
throw $e;
}
}

$op = $matches[1] ?: '=';

Expand Down
32 changes: 32 additions & 0 deletions tests/VersionParserTest.php
Expand Up @@ -545,6 +545,38 @@ public function testDoNotCollapseContiguousRangeIfOtherConstraintsAlsoApply()
$this->assertSame((string) $multi, (string) $parsed);
}

/**
* @dataProvider constraintProvider
*/
public function testParseConstraints($constraint, $expected)
{
$parser = new VersionParser();

$this->assertSame($expected, (string) $parser->parseConstraints($constraint));
}

public function constraintProvider()
{
return array(
// numeric branch
array('3.x-dev', '== 3.9999999.9999999.9999999-dev'),
array('3-dev', '== 3.0.0.0-dev'),
// non-numeric branches
array('dev-3.x', '== dev-3.x'),
array('xsd2php-dev', '== dev-xsd2php'),
array('3.next-dev', '== dev-3.next'),
array('foobar-dev', '== dev-foobar'),
array('dev-xsd2php', '== dev-xsd2php'),
array('dev-3.next', '== dev-3.next'),
array('dev-foobar', '== dev-foobar'),
array('dev-1.0.0-dev<1.0.5-dev', '== dev-1.0.0-dev<1.0.5-dev'),
array('1.0.0-dev<1.0.5-dev', '== dev-1.0.0-dev<1.0.5'),
array('foobar-dev as 2.1.0', '== dev-foobar'),
array('foobar-dev as 2.1.0 || 3.5', '[== dev-foobar || == 3.5.0.0]'),
array('foobar-dev as 2.1.0 || 3.5 as 1.5', '[== dev-foobar || == 3.5.0.0]'),
);
}

/**
* @dataProvider multiConstraintProvider
*/
Expand Down

0 comments on commit 34052c6

Please sign in to comment.