Browse Source

Split branches and tag versions into different files to increase cache utilization, refs composer/composer#6415

Jordi Boggiano 6 years ago
parent
commit
57d65b9ad5
1 changed files with 23 additions and 5 deletions
  1. 23 5
      src/Packagist/WebBundle/Package/SymlinkDumper.php

+ 23 - 5
src/Packagist/WebBundle/Package/SymlinkDumper.php

@@ -281,8 +281,10 @@ class SymlinkDumper
 
                     // dump v2 format
                     $key = $name.'.json';
-                    $this->dumpPackageToV2File($package, $versionData, $key);
+                    $keyDev = $name.'~dev.json';
+                    $this->dumpPackageToV2File($package, $versionData, $key, $keyDev);
                     $modifiedV2Files[$key] = true;
+                    $modifiedV2Files[$keyDev] = true;
 
                     // store affected files to clean up properly in the next update
                     $this->fs->mkdir(dirname($buildDir.'/'.$name));
@@ -699,11 +701,8 @@ class SymlinkDumper
         $this->individualFilesV2Mtime = array();
     }
 
-    private function dumpPackageToV2File(Package $package, $versionData, string $packageKey)
+    private function dumpPackageToV2File(Package $package, $versionData, string $packageKey, string $packageKeyDev)
     {
-        $minifiedVersions = [];
-        $mtime = 0;
-
         $versions = $package->getVersions();
         if (is_object($versions)) {
             $versions = $versions->toArray();
@@ -711,6 +710,25 @@ class SymlinkDumper
 
         usort($versions, Package::class.'::sortVersions');
 
+        $tags = [];
+        $branches = [];
+        foreach ($versions as $version) {
+            if ($version->isDevelopment()) {
+                $branches[] = $version;
+            } else {
+                $tags[] = $version;
+            }
+        }
+
+        $this->dumpVersionsToV2File($package, $tags, $versionData, $packageKey);
+        $this->dumpVersionsToV2File($package, $branches, $versionData, $packageKeyDev);
+    }
+
+    private function dumpVersionsToV2File(Package $package, $versions, $versionData, string $packageKey)
+    {
+        $minifiedVersions = [];
+        $mtime = 0;
+
         $lastKnownVersionData = null;
         foreach ($versions as $version) {
             $versionArray = $version->toV2Array($versionData);