浏览代码

Add support for new minified format

Jordi Boggiano 6 年之前
父节点
当前提交
37550ce44b
共有 1 个文件被更改,包括 31 次插入3 次删除
  1. 31 3
      src/Composer/Repository/ComposerRepository.php

+ 31 - 3
src/Composer/Repository/ComposerRepository.php

@@ -598,8 +598,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
 
 
             $promises[] = $this->asyncFetchFile($url, $cacheKey, $lastModified)
             $promises[] = $this->asyncFetchFile($url, $cacheKey, $lastModified)
                 ->then(function ($response) use (&$packages, $contents, $name, $constraint, $repo, $isPackageAcceptableCallable) {
                 ->then(function ($response) use (&$packages, $contents, $name, $constraint, $repo, $isPackageAcceptableCallable) {
-                    static $uniqKeys = array('version', 'version_normalized', 'source', 'dist', 'time');
-
                     if (true === $response) {
                     if (true === $response) {
                         $response = $contents;
                         $response = $contents;
                     }
                     }
@@ -608,8 +606,38 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
                         return;
                         return;
                     }
                     }
 
 
+                    $versions = $response['packages'][$name];
+
+                    if (isset($response['minified']) && $response['minified'] === 'composer/2.0') {
+                        // TODO extract in other method
+                        $expanded = array();
+                        $expandedVersion = null;
+                        foreach ($versions as $versionData) {
+                            if (!$expandedVersion) {
+                                $expandedVersion = $versionData;
+                                $expanded[] = $expandedVersion;
+                                continue;
+                            }
+
+                            // add any changes from the previous version to the expanded one
+                            foreach ($versionData as $key => $val) {
+                                if ($val === '__unset') {
+                                    unset($expandedVersion[$key]);
+                                } else {
+                                    $expandedVersion[$key] = $val;
+                                }
+                            }
+
+                            $expanded[] = $expandedVersion;
+                        }
+
+                        $versions = $expanded;
+                        unset($expanded, $expandedVersion, $versionData);
+                    }
+
+                    static $uniqKeys = array('version', 'version_normalized', 'source', 'dist', 'time');
                     $versionsToLoad = array();
                     $versionsToLoad = array();
-                    foreach ($response['packages'][$name] as $version) {
+                    foreach ($versions as $version) {
                         if (isset($version['version_normalizeds'])) {
                         if (isset($version['version_normalizeds'])) {
                             foreach ($version['version_normalizeds'] as $index => $normalizedVersion) {
                             foreach ($version['version_normalizeds'] as $index => $normalizedVersion) {
                                 if (!$repo->isVersionAcceptable($isPackageAcceptableCallable, $constraint, $name, $normalizedVersion)) {
                                 if (!$repo->isVersionAcceptable($isPackageAcceptableCallable, $constraint, $name, $normalizedVersion)) {