Browse Source

Invalidate map cache when addPackage/removePackage is called

Jordi Boggiano 5 years ago
parent
commit
44cdc37c0c
1 changed files with 10 additions and 0 deletions
  1. 10 0
      src/Composer/Repository/ArrayRepository.php

+ 10 - 0
src/Composer/Repository/ArrayRepository.php

@@ -28,6 +28,10 @@ class ArrayRepository extends BaseRepository
 {
     /** @var PackageInterface[] */
     protected $packages;
+    
+    /** 
+      * @var PackageInterface[] indexed by package unique name and used to cache hasPackage calls
+      */
     protected $packageMap;
 
     public function __construct(array $packages = array())
@@ -151,6 +155,9 @@ class ArrayRepository extends BaseRepository
                 $this->addPackage($aliasedPackage);
             }
         }
+
+        // invalidate package map cache
+        $this->packageMap = null;
     }
 
     protected function createAliasPackage(PackageInterface $package, $alias, $prettyAlias)
@@ -171,6 +178,9 @@ class ArrayRepository extends BaseRepository
             if ($packageId === $repoPackage->getUniqueName()) {
                 array_splice($this->packages, $key, 1);
 
+                // invalidate package map cache
+                $this->packageMap = null;
+
                 return;
             }
         }