From ee56db87672453d9a8c050d1115f991e483f4806 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 21 Feb 2014 14:33:46 +0100 Subject: [PATCH 1/4] Remove the handling of updates in the generator Updates are implicitly handled by whatProvides for install requests --- .../DependencyResolver/RuleSetGenerator.php | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/Composer/DependencyResolver/RuleSetGenerator.php b/src/Composer/DependencyResolver/RuleSetGenerator.php index fa58687ea..ed0ab72a5 100644 --- a/src/Composer/DependencyResolver/RuleSetGenerator.php +++ b/src/Composer/DependencyResolver/RuleSetGenerator.php @@ -263,30 +263,6 @@ class RuleSetGenerator return $impossible; } - /** - * Adds all rules for all update packages of a given package - * - * @param PackageInterface $package Rules for this package's updates are to - * be added - */ - private function addRulesForUpdatePackages(PackageInterface $package, $ignorePlatformReqs) - { - $updates = $this->policy->findUpdatePackages($this->pool, $this->installedMap, $package); - - foreach ($updates as $update) { - $this->addRulesForPackage($update, $ignorePlatformReqs); - } - } - - private function whitelistFromUpdatePackages(PackageInterface $package) - { - $updates = $this->policy->findUpdatePackages($this->pool, $this->installedMap, $package, true); - - foreach ($updates as $update) { - $this->whitelistFromPackage($update); - } - } - protected function whitelistFromJobs() { foreach ($this->jobs as $job) { @@ -344,7 +320,6 @@ class RuleSetGenerator $this->whitelistedMap = array(); foreach ($this->installedMap as $package) { $this->whitelistFromPackage($package); - $this->whitelistFromUpdatePackages($package); } $this->whitelistFromJobs(); @@ -353,7 +328,6 @@ class RuleSetGenerator $this->addedMap = array(); foreach ($this->installedMap as $package) { $this->addRulesForPackage($package, $ignorePlatformReqs); - $this->addRulesForUpdatePackages($package, $ignorePlatformReqs); } $this->addRulesForJobs($ignorePlatformReqs); From 0daaa1a902fac09c1c5f3a33b8036ba3dc0ce125 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 21 Feb 2014 14:42:56 +0100 Subject: [PATCH 2/4] Reduce whatProvides overhead --- src/Composer/DependencyResolver/Pool.php | 25 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Composer/DependencyResolver/Pool.php b/src/Composer/DependencyResolver/Pool.php index 05645c87a..c385fda60 100644 --- a/src/Composer/DependencyResolver/Pool.php +++ b/src/Composer/DependencyResolver/Pool.php @@ -45,6 +45,7 @@ class Pool protected $providerRepos = array(); protected $packages = array(); protected $packageByName = array(); + protected $packageByExactName = array(); protected $acceptableStabilities; protected $stabilityFlags; protected $versionParser; @@ -122,6 +123,7 @@ class Pool $package['id'] = $this->id++; $package['stability'] = $stability; $this->packages[] = $package; + $this->packageByExactName[$package->getName()][$package['id']] = $this->packages[$this->id - 2]; foreach ($names as $provided) { $this->packageByName[$provided][$package['id']] = $this->packages[$this->id - 2]; @@ -144,6 +146,7 @@ class Pool $alias['id'] = $this->id++; $alias['root_alias'] = true; $this->packages[] = $alias; + $this->packageByExactName[$package->getName()][$alias['id']] = $this->packages[$this->id - 2]; foreach ($names as $provided) { $this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2]; @@ -159,6 +162,7 @@ class Pool $alias['alias_of'] = $package['id']; $alias['id'] = $this->id++; $this->packages[] = $alias; + $this->packageByExactName[$package->getName()][$alias['id']] = $this->packages[$this->id - 2]; foreach ($names as $provided) { $this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2]; @@ -173,6 +177,7 @@ class Pool if ($exempt || $this->isPackageAcceptable($names, $stability)) { $package->setId($this->id++); $this->packages[] = $package; + $this->packageByExactName[$package->getName()][$package->getId()] = $package; foreach ($names as $provided) { $this->packageByName[$provided][] = $package; @@ -191,6 +196,7 @@ class Pool $package->getRepository()->addPackage($aliasPackage); $this->packages[] = $aliasPackage; + $this->packageByExactName[$aliasPackage->getName()][$aliasPackage->getId()] = $aliasPackage; foreach ($aliasPackage->getNames() as $name) { $this->packageByName[$name][] = $aliasPackage; @@ -261,8 +267,17 @@ class Pool } } - if (isset($this->packageByName[$name])) { - $candidates = array_merge($candidates, $this->packageByName[$name]); + if ($mustMatchName) { + $candidates = array_filter($candidates, function ($candidate) use ($name) { + return $candidate->getName() == $name; + }); + if (isset($this->packageByExactName[$name])) { + $candidates = array_merge($candidates, $this->packageByExactName[$name]); + } + } else { + if (isset($this->packageByName[$name])) { + $candidates = array_merge($candidates, $this->packageByName[$name]); + } } $matches = $provideMatches = array(); @@ -313,12 +328,6 @@ class Pool } } - if ($mustMatchName) { - return array_filter($matches, function ($match) use ($name) { - return $match->getName() == $name; - }); - } - // if a package with the required name exists, we ignore providers if ($nameMatch) { return $matches; From 83159dc153ac27287ee9902f2eadbb96a0ee8da4 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 21 Feb 2014 14:59:41 +0100 Subject: [PATCH 3/4] Use elseif instead of else { if { --- src/Composer/DependencyResolver/Pool.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Composer/DependencyResolver/Pool.php b/src/Composer/DependencyResolver/Pool.php index c385fda60..13a233155 100644 --- a/src/Composer/DependencyResolver/Pool.php +++ b/src/Composer/DependencyResolver/Pool.php @@ -274,10 +274,8 @@ class Pool if (isset($this->packageByExactName[$name])) { $candidates = array_merge($candidates, $this->packageByExactName[$name]); } - } else { - if (isset($this->packageByName[$name])) { - $candidates = array_merge($candidates, $this->packageByName[$name]); - } + } elseif (isset($this->packageByName[$name])) { + $candidates = array_merge($candidates, $this->packageByName[$name]); } $matches = $provideMatches = array(); From 9751e1ab58a3bd40e986eee9f58ac57fa40b2e20 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 21 Feb 2014 15:00:38 +0100 Subject: [PATCH 4/4] Remove unnecessary collection of names which isn't used --- .../Repository/ComposerRepository.php | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index 134a47c2a..4bfe6db4e 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -381,25 +381,6 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository } } } else { - if (isset($version['provide']) || isset($version['replace'])) { - // collect names - $names = array( - strtolower($version['name']) => true, - ); - if (isset($version['provide'])) { - foreach ($version['provide'] as $target => $constraint) { - $names[strtolower($target)] = true; - } - } - if (isset($version['replace'])) { - foreach ($version['replace'] as $target => $constraint) { - $names[strtolower($target)] = true; - } - } - $names = array_keys($names); - } else { - $names = array(strtolower($version['name'])); - } if (!$pool->isPackageAcceptable(strtolower($version['name']), VersionParser::parseStability($version['version']))) { continue; }