1
0
Fork 0

Merge pull request #317 from edorian/remove-allowDowngrade

Removed the option to disallowed downgrades
pull/318/merge
Nils Adermann 2012-02-18 08:59:52 -08:00
commit 54a8dc1d9c
3 changed files with 9 additions and 36 deletions

View File

@ -26,11 +26,6 @@ class DefaultPolicy implements PolicyInterface
return true;
}
public function allowDowngrade()
{
return true;
}
public function versionCompare(PackageInterface $a, PackageInterface $b, $operator)
{
$constraint = new VersionConstraint($operator, $b->getVersion());
@ -39,16 +34,11 @@ class DefaultPolicy implements PolicyInterface
return $constraint->matchSpecific($version);
}
public function findUpdatePackages(Solver $solver, Pool $pool, array $installedMap, PackageInterface $package, $allowAll = false)
public function findUpdatePackages(Solver $solver, Pool $pool, array $installedMap, PackageInterface $package)
{
$packages = array();
foreach ($pool->whatProvides($package->getName()) as $candidate) {
// skip old packages unless downgrades are an option
if (!$allowAll && !$this->allowDowngrade() && $this->versionCompare($package, $candidate, '>')) {
continue;
}
if ($candidate !== $package) {
$packages[] = $candidate;
}

View File

@ -21,9 +21,8 @@ use Composer\Package\PackageInterface;
interface PolicyInterface
{
function allowUninstall();
function allowDowngrade();
function versionCompare(PackageInterface $a, PackageInterface $b, $operator);
function findUpdatePackages(Solver $solver, Pool $pool, array $installedMap, PackageInterface $package, $allowAll);
function findUpdatePackages(Solver $solver, Pool $pool, array $installedMap, PackageInterface $package);
function installable(Solver $solver, Pool $pool, array $installedMap, PackageInterface $package);
function selectPreferedPackages(Pool $pool, array $installedMap, array $literals);
}

View File

@ -375,9 +375,9 @@ class Solver
* be added
* @param bool $allowAll Whether downgrades are allowed
*/
private function addRulesForUpdatePackages(PackageInterface $package, $allowAll)
private function addRulesForUpdatePackages(PackageInterface $package)
{
$updates = $this->policy->findUpdatePackages($this, $this->pool, $this->installedMap, $package, $allowAll);
$updates = $this->policy->findUpdatePackages($this, $this->pool, $this->installedMap, $package);
$this->addRulesForPackage($package);
@ -965,7 +965,7 @@ class Solver
}
foreach ($installedPackages as $package) {
$this->addRulesForUpdatePackages($package, true);
$this->addRulesForUpdatePackages($package);
}
@ -983,33 +983,17 @@ class Solver
// solver_addrpmrulesforweak(solv, &addedmap);
foreach ($installedPackages as $package) {
// create a feature rule which allows downgrades
$updates = $this->policy->findUpdatePackages($this, $this->pool, $this->installedMap, $package, true);
$featureRule = $this->createUpdateRule($package, $updates, self::RULE_INTERNAL_ALLOW_UPDATE, (string) $package);
// create an update rule which does not allow downgrades
$updates = $this->policy->findUpdatePackages($this, $this->pool, $this->installedMap, $package, false);
$updates = $this->policy->findUpdatePackages($this, $this->pool, $this->installedMap, $package);
$rule = $this->createUpdateRule($package, $updates, self::RULE_INTERNAL_ALLOW_UPDATE, (string) $package);
if ($rule->equals($featureRule)) {
if ($this->policy->allowUninstall()) {
$featureRule->setWeak(true);
$rule->setWeak(true);
$this->addRule(RuleSet::TYPE_FEATURE, $featureRule);
$this->packageToFeatureRule[$package->getId()] = $rule;
} else {
$this->addRule(RuleSet::TYPE_UPDATE, $rule);
$this->packageToUpdateRule[$package->getId()] = $rule;
}
} else if ($this->policy->allowUninstall()) {
$featureRule->setWeak(true);
$rule->setWeak(true);
$this->addRule(RuleSet::TYPE_FEATURE, $featureRule);
$this->addRule(RuleSet::TYPE_UPDATE, $rule);
$this->packageToFeatureRule[$package->getId()] = $rule;
$this->packageToUpdateRule[$package->getId()] = $rule;
}
}
foreach ($this->jobs as $job) {