1
0
Fork 0

Semantic Version Parsing: ~version

Implemented `~` according to #643 and used the following versions
as a test case as defined by @Seldaek:

 * "~1.2.3.4" = ">=1.2.3.4 <1.2.4.0-dev"
 * "~1.2.3" = ">=1.2.3 <1.3.0-dev"
 * "~1.2" = ">=1.2.0 <2.0.0-dev"
 * "~1" = ">=1.0.0 <2.0.0-dev"

Refs #643
pull/1160/head
Beau Simensen 2012-09-29 16:27:38 -07:00
parent 62bb5b339b
commit 96a76eeffc
2 changed files with 47 additions and 0 deletions

View File

@ -245,6 +245,28 @@ class VersionParser
return array();
}
if (preg_match('{^~(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.(\d+))?$}', $constraint, $matches)) {
if (isset($matches[4])) {
$highVersion = $matches[1] . '.' . $matches[2] . '.' . ($matches[3] + 1) . '.0-dev';
$lowVersion = $matches[1] . '.' . $matches[2] . '.' . $matches[3]. '.' . $matches[4];
} elseif (isset($matches[3])) {
$highVersion = $matches[1] . '.' . ($matches[2] + 1) . '.0.0-dev';
$lowVersion = $matches[1] . '.' . $matches[2] . '.' . $matches[3]. '.0';
} else {
$highVersion = ($matches[1] + 1) . '.0.0.0-dev';
if (isset($matches[2])) {
$lowVersion = $matches[1] . '.' . $matches[2] . '.0.0';
} else {
$lowVersion = $matches[1] . '.0.0.0';
}
}
return array(
new VersionConstraint('>=', $lowVersion),
new VersionConstraint('<', $highVersion),
);
}
// match wildcard constraints
if (preg_match('{^(\d+)(?:\.(\d+))?(?:\.(\d+))?\.[x*]$}', $constraint, $matches)) {
if (isset($matches[3])) {

View File

@ -240,6 +240,31 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
);
}
/**
* @dataProvider tildeConstraints
*/
public function testParseTildeWildcard($input, $min, $max)
{
$parser = new VersionParser;
if ($min) {
$expected = new MultiConstraint(array($min, $max));
} else {
$expected = $max;
}
$this->assertSame((string) $expected, (string) $parser->parseConstraints($input));
}
public function tildeConstraints()
{
return array(
array('~1', new VersionConstraint('>=', '1.0.0.0'), new VersionConstraint('<', '2.0.0.0-dev')),
array('~1.2', new VersionConstraint('>=', '1.2.0.0'), new VersionConstraint('<', '2.0.0.0-dev')),
array('~1.2.3', new VersionConstraint('>=', '1.2.3.0'), new VersionConstraint('<', '1.3.0.0-dev')),
array('~1.2.3.4', new VersionConstraint('>=', '1.2.3.4'), new VersionConstraint('<', '1.2.4.0-dev')),
);
}
public function testParseConstraintsMulti()
{
$parser = new VersionParser;