Przeglądaj źródła

Fix handling of partial package listings containing replaces/provides

Jordi Boggiano 8 lat temu
rodzic
commit
9ee17ef6ff
1 zmienionych plików z 14 dodań i 1 usunięć
  1. 14 1
      src/Composer/Repository/ComposerRepository.php

+ 14 - 1
src/Composer/Repository/ComposerRepository.php

@@ -785,7 +785,20 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
 
         $this->partialPackagesByName = array();
         foreach ($rootData['packages'] as $package => $versions) {
-            $this->partialPackagesByName[strtolower($package)] = $versions;
+            $package = strtolower($package);
+            foreach ($versions as $version) {
+                $this->partialPackagesByName[$package][] = $version;
+                if (!empty($version['provide']) && is_array($version['provide'])) {
+                    foreach ($version['provide'] as $provided => $providedVersion) {
+                        $this->partialPackagesByName[strtolower($provided)][] = $version;
+                    }
+                }
+                if (!empty($version['replace']) && is_array($version['replace'])) {
+                    foreach ($version['replace'] as $provided => $providedVersion) {
+                        $this->partialPackagesByName[strtolower($provided)][] = $version;
+                    }
+                }
+            }
         }
 
         // wipe rootData as it is fully consumed at this point and this saves some memory