Browse Source

Improved hasPackage() performance

Michael Thessel 5 years ago
parent
commit
f8010d5220
1 changed files with 5 additions and 6 deletions
  1. 5 6
      src/Composer/Repository/ArrayRepository.php

+ 5 - 6
src/Composer/Repository/ArrayRepository.php

@@ -28,6 +28,7 @@ class ArrayRepository extends BaseRepository
 {
     /** @var PackageInterface[] */
     protected $packages;
+    protected $packageMap;
 
     public function __construct(array $packages = array())
     {
@@ -121,15 +122,13 @@ class ArrayRepository extends BaseRepository
      */
     public function hasPackage(PackageInterface $package)
     {
-        $packageId = $package->getUniqueName();
-
-        foreach ($this->getPackages() as $repoPackage) {
-            if ($packageId === $repoPackage->getUniqueName()) {
-                return true;
+        if (empty($this->packageMap)) {
+            foreach ($this->getPackages() as $repoPackage) {
+                $this->packageMap[$repoPackage->getUniqueName()] = $repoPackage;
             }
         }
 
-        return false;
+        return isset($this->packageMap[$package->getUniqueName()]);
     }
 
     /**