1
0
Fork 0
mirror of https://github.com/composer/composer synced 2025-05-09 00:22:53 +00:00

Request jobs replaced by root require / fixed package

The only type of request job remaining was "install" which is really a
root requirement. The only other kind of input for the solver is now a
set of fixed packages.

Rules have been updated to account for only two kinds of former job
reason: FIXED or ROOT_REQUIRE. The job property has always been
redundant and has been removed, since reasonData suffices.

Problem reasons are always rules, so the unnecessary wrapping in an
array has been removed.

We now only ever generate a single rule per root require or fixed
package, so there is no need for the solver to special handle disabling
"jobs" anymore, the rule can just be disabled as usual.

For consistency special handling of rules for jobs in problems has been
integrated into the rule class like all other rule reasons. As part of
this change the error message for root requirements has been improved a
bit to make it clearer where the package installation request came from.

The word job has also been removed from operations, which are called
operations, not jobs.
This commit is contained in:
Nils Adermann 2020-01-19 23:11:36 +01:00
parent 921a97457d
commit 5bdc0fc9c5
33 changed files with 271 additions and 365 deletions

View file

@ -26,9 +26,9 @@ class RuleSetTest extends TestCase
{
$rules = array(
RuleSet::TYPE_PACKAGE => array(),
RuleSet::TYPE_JOB => array(
new GenericRule(array(1), Rule::RULE_JOB_INSTALL, null),
new GenericRule(array(2), Rule::RULE_JOB_INSTALL, null),
RuleSet::TYPE_REQUEST => array(
new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, null),
new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, null),
),
RuleSet::TYPE_LEARNED => array(
new GenericRule(array(), Rule::RULE_INTERNAL_ALLOW_UPDATE, null),
@ -37,9 +37,9 @@ class RuleSetTest extends TestCase
$ruleSet = new RuleSet;
$ruleSet->add($rules[RuleSet::TYPE_JOB][0], RuleSet::TYPE_JOB);
$ruleSet->add($rules[RuleSet::TYPE_REQUEST][0], RuleSet::TYPE_REQUEST);
$ruleSet->add($rules[RuleSet::TYPE_LEARNED][0], RuleSet::TYPE_LEARNED);
$ruleSet->add($rules[RuleSet::TYPE_JOB][1], RuleSet::TYPE_JOB);
$ruleSet->add($rules[RuleSet::TYPE_REQUEST][1], RuleSet::TYPE_REQUEST);
$this->assertEquals($rules, $ruleSet->getRules());
}
@ -47,20 +47,20 @@ class RuleSetTest extends TestCase
public function testAddIgnoresDuplicates()
{
$rules = array(
RuleSet::TYPE_JOB => array(
new GenericRule(array(), Rule::RULE_JOB_INSTALL, null),
new GenericRule(array(), Rule::RULE_JOB_INSTALL, null),
new GenericRule(array(), Rule::RULE_JOB_INSTALL, null),
RuleSet::TYPE_REQUEST => array(
new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, null),
new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, null),
new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, null),
),
);
$ruleSet = new RuleSet;
$ruleSet->add($rules[RuleSet::TYPE_JOB][0], RuleSet::TYPE_JOB);
$ruleSet->add($rules[RuleSet::TYPE_JOB][1], RuleSet::TYPE_JOB);
$ruleSet->add($rules[RuleSet::TYPE_JOB][2], RuleSet::TYPE_JOB);
$ruleSet->add($rules[RuleSet::TYPE_REQUEST][0], RuleSet::TYPE_REQUEST);
$ruleSet->add($rules[RuleSet::TYPE_REQUEST][1], RuleSet::TYPE_REQUEST);
$ruleSet->add($rules[RuleSet::TYPE_REQUEST][2], RuleSet::TYPE_REQUEST);
$this->assertCount(1, $ruleSet->getIteratorFor(array(RuleSet::TYPE_JOB)));
$this->assertCount(1, $ruleSet->getIteratorFor(array(RuleSet::TYPE_REQUEST)));
}
/**
@ -70,15 +70,15 @@ class RuleSetTest extends TestCase
{
$ruleSet = new RuleSet;
$ruleSet->add(new GenericRule(array(), Rule::RULE_JOB_INSTALL, null), 7);
$ruleSet->add(new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, null), 7);
}
public function testCount()
{
$ruleSet = new RuleSet;
$ruleSet->add(new GenericRule(array(1), Rule::RULE_JOB_INSTALL, null), RuleSet::TYPE_JOB);
$ruleSet->add(new GenericRule(array(2), Rule::RULE_JOB_INSTALL, null), RuleSet::TYPE_JOB);
$ruleSet->add(new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, null), RuleSet::TYPE_REQUEST);
$ruleSet->add(new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, null), RuleSet::TYPE_REQUEST);
$this->assertEquals(2, $ruleSet->count());
}
@ -87,8 +87,8 @@ class RuleSetTest extends TestCase
{
$ruleSet = new RuleSet;
$rule = new GenericRule(array(), Rule::RULE_JOB_INSTALL, null);
$ruleSet->add($rule, RuleSet::TYPE_JOB);
$rule = new GenericRule(array(), Rule::RULE_ROOT_REQUIRE, null);
$ruleSet->add($rule, RuleSet::TYPE_REQUEST);
$this->assertSame($rule, $ruleSet->ruleById[0]);
}
@ -97,9 +97,9 @@ class RuleSetTest extends TestCase
{
$ruleSet = new RuleSet;
$rule1 = new GenericRule(array(1), Rule::RULE_JOB_INSTALL, null);
$rule2 = new GenericRule(array(2), Rule::RULE_JOB_INSTALL, null);
$ruleSet->add($rule1, RuleSet::TYPE_JOB);
$rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, null);
$rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, null);
$ruleSet->add($rule1, RuleSet::TYPE_REQUEST);
$ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
$iterator = $ruleSet->getIterator();
@ -112,10 +112,10 @@ class RuleSetTest extends TestCase
public function testGetIteratorFor()
{
$ruleSet = new RuleSet;
$rule1 = new GenericRule(array(1), Rule::RULE_JOB_INSTALL, null);
$rule2 = new GenericRule(array(2), Rule::RULE_JOB_INSTALL, null);
$rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, null);
$rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, null);
$ruleSet->add($rule1, RuleSet::TYPE_JOB);
$ruleSet->add($rule1, RuleSet::TYPE_REQUEST);
$ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
$iterator = $ruleSet->getIteratorFor(RuleSet::TYPE_LEARNED);
@ -126,13 +126,13 @@ class RuleSetTest extends TestCase
public function testGetIteratorWithout()
{
$ruleSet = new RuleSet;
$rule1 = new GenericRule(array(1), Rule::RULE_JOB_INSTALL, null);
$rule2 = new GenericRule(array(2), Rule::RULE_JOB_INSTALL, null);
$rule1 = new GenericRule(array(1), Rule::RULE_ROOT_REQUIRE, null);
$rule2 = new GenericRule(array(2), Rule::RULE_ROOT_REQUIRE, null);
$ruleSet->add($rule1, RuleSet::TYPE_JOB);
$ruleSet->add($rule1, RuleSet::TYPE_REQUEST);
$ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
$iterator = $ruleSet->getIteratorWithout(RuleSet::TYPE_JOB);
$iterator = $ruleSet->getIteratorWithout(RuleSet::TYPE_REQUEST);
$this->assertSame($rule2, $iterator->current());
}
@ -145,10 +145,10 @@ class RuleSetTest extends TestCase
$ruleSet = new RuleSet;
$literal = $p->getId();
$rule = new GenericRule(array($literal), Rule::RULE_JOB_INSTALL, null);
$rule = new GenericRule(array($literal), Rule::RULE_ROOT_REQUIRE, array('packageName' => 'foo/bar', 'constraint' => null));
$ruleSet->add($rule, RuleSet::TYPE_JOB);
$ruleSet->add($rule, RuleSet::TYPE_REQUEST);
$this->assertContains('JOB : Install command rule (install foo 2.1)', $ruleSet->getPrettyString($pool));
$this->assertContains('REQUEST : No package found to satisfy root composer.json require foo/bar', $ruleSet->getPrettyString($pool));
}
}