Merge pull request #808 from palex-fpt/not-equal-operator
Add '<>' operator to Version Parserpull/822/merge
commit
4fcc114f97
|
@ -36,6 +36,10 @@ class VersionConstraint extends SpecificConstraint
|
||||||
$operator = '==';
|
$operator = '==';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ('<>' === $operator) {
|
||||||
|
$operator = '!=';
|
||||||
|
}
|
||||||
|
|
||||||
$this->operator = $operator;
|
$this->operator = $operator;
|
||||||
$this->version = $version;
|
$this->version = $version;
|
||||||
}
|
}
|
||||||
|
@ -49,6 +53,18 @@ class VersionConstraint extends SpecificConstraint
|
||||||
$noEqualOp = str_replace('=', '', $this->operator);
|
$noEqualOp = str_replace('=', '', $this->operator);
|
||||||
$providerNoEqualOp = str_replace('=', '', $provider->operator);
|
$providerNoEqualOp = str_replace('=', '', $provider->operator);
|
||||||
|
|
||||||
|
$isEqualOp = '==' === $this->operator;
|
||||||
|
$isNonEqualOp = '!=' === $this->operator;
|
||||||
|
$isProviderEqualOp = '==' === $provider->operator;
|
||||||
|
$isProviderNonEqualOp = '!=' === $provider->operator;
|
||||||
|
|
||||||
|
// '!=' operator is match when other operator is not '==' operator or version is not match
|
||||||
|
// these kinds of comparisons always have a solution
|
||||||
|
if ($isNonEqualOp || $isProviderNonEqualOp) {
|
||||||
|
return !$isEqualOp && !$isProviderEqualOp
|
||||||
|
|| version_compare($provider->version, $this->version, '!=');
|
||||||
|
}
|
||||||
|
|
||||||
// an example for the condition is <= 2.0 & < 1.0
|
// an example for the condition is <= 2.0 & < 1.0
|
||||||
// these kinds of comparisons always have a solution
|
// these kinds of comparisons always have a solution
|
||||||
if ($this->operator != '==' && $noEqualOp == $providerNoEqualOp) {
|
if ($this->operator != '==' && $noEqualOp == $providerNoEqualOp) {
|
||||||
|
|
|
@ -233,7 +233,7 @@ class VersionParser
|
||||||
}
|
}
|
||||||
|
|
||||||
// match operators constraints
|
// match operators constraints
|
||||||
if (preg_match('{^(>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
|
if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) {
|
||||||
try {
|
try {
|
||||||
$version = $this->normalize($matches[2]);
|
$version = $this->normalize($matches[2]);
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,30 @@ class SolverTest extends TestCase
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSolverInstallHonoursNotEqualOperator()
|
||||||
|
{
|
||||||
|
$this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
|
||||||
|
$this->repo->addPackage($packageB = $this->getPackage('B', '1.0'));
|
||||||
|
$this->repo->addPackage($newPackageB11 = $this->getPackage('B', '1.1'));
|
||||||
|
$this->repo->addPackage($newPackageB12 = $this->getPackage('B', '1.2'));
|
||||||
|
$this->repo->addPackage($newPackageB13 = $this->getPackage('B', '1.3'));
|
||||||
|
|
||||||
|
$packageA->setRequires(array(
|
||||||
|
new Link('A', 'B', $this->getVersionConstraint('<=', '1.3'), 'requires'),
|
||||||
|
new Link('A', 'B', $this->getVersionConstraint('<>', '1.3'), 'requires'),
|
||||||
|
new Link('A', 'B', $this->getVersionConstraint('!=', '1.2'), 'requires'),
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->reposComplete();
|
||||||
|
|
||||||
|
$this->request->install('A');
|
||||||
|
|
||||||
|
$this->checkSolverResult(array(
|
||||||
|
array('job' => 'install', 'package' => $newPackageB11),
|
||||||
|
array('job' => 'install', 'package' => $packageA),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
public function testSolverInstallWithDepsInOrder()
|
public function testSolverInstallWithDepsInOrder()
|
||||||
{
|
{
|
||||||
$this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
|
$this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
|
||||||
|
|
|
@ -27,6 +27,12 @@ class VersionConstraintTest extends \PHPUnit_Framework_TestCase
|
||||||
array('<=', '2', '>=', '1'),
|
array('<=', '2', '>=', '1'),
|
||||||
array('>=', '1', '<=', '2'),
|
array('>=', '1', '<=', '2'),
|
||||||
array('==', '2', '>=', '2'),
|
array('==', '2', '>=', '2'),
|
||||||
|
array('!=', '1', '!=', '1'),
|
||||||
|
array('!=', '1', '==', '2'),
|
||||||
|
array('!=', '1', '<', '1'),
|
||||||
|
array('!=', '1', '<=', '1'),
|
||||||
|
array('!=', '1', '>', '1'),
|
||||||
|
array('!=', '1', '>=', '1'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +59,8 @@ class VersionConstraintTest extends \PHPUnit_Framework_TestCase
|
||||||
array('<=', '1', '>=', '2'),
|
array('<=', '1', '>=', '2'),
|
||||||
array('>=', '2', '<=', '1'),
|
array('>=', '2', '<=', '1'),
|
||||||
array('==', '2', '<', '2'),
|
array('==', '2', '<', '2'),
|
||||||
|
array('!=', '1', '==', '1'),
|
||||||
|
array('==', '1', '!=', '1'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,8 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
|
||||||
'match any/2' => array('*.*', new MultiConstraint(array())),
|
'match any/2' => array('*.*', new MultiConstraint(array())),
|
||||||
'match any/3' => array('*.x.*', new MultiConstraint(array())),
|
'match any/3' => array('*.x.*', new MultiConstraint(array())),
|
||||||
'match any/4' => array('x.x.x.*', new MultiConstraint(array())),
|
'match any/4' => array('x.x.x.*', new MultiConstraint(array())),
|
||||||
|
'not equal' => array('<>1.0.0', new VersionConstraint('<>', '1.0.0.0')),
|
||||||
|
'not equal/2' => array('!=1.0.0', new VersionConstraint('!=', '1.0.0.0')),
|
||||||
'greater than' => array('>1.0.0', new VersionConstraint('>', '1.0.0.0')),
|
'greater than' => array('>1.0.0', new VersionConstraint('>', '1.0.0.0')),
|
||||||
'lesser than' => array('<1.2.3.4', new VersionConstraint('<', '1.2.3.4')),
|
'lesser than' => array('<1.2.3.4', new VersionConstraint('<', '1.2.3.4')),
|
||||||
'less/eq than' => array('<=1.2.3', new VersionConstraint('<=', '1.2.3.0')),
|
'less/eq than' => array('<=1.2.3', new VersionConstraint('<=', '1.2.3.0')),
|
||||||
|
|
Loading…
Reference in New Issue