Sfoglia il codice sorgente

Lock file should not contain new aliases for packages which were not updated

Nils Adermann 5 anni fa
parent
commit
f7b5cbd1fc

+ 18 - 0
src/Composer/DependencyResolver/LockTransaction.php

@@ -112,4 +112,22 @@ class LockTransaction extends Transaction
 
         return $packages;
     }
+
+    /**
+     * Checks which of the given aliases from composer.json are actually in use for the lock file
+     */
+    public function getAliases($aliases)
+    {
+        $usedAliases = array();
+
+        foreach ($this->resultPackages['all'] as $package) {
+            if ($package instanceof AliasPackage) {
+                if (isset($aliases[$package->getName()])) {
+                    $usedAliases[$package->getName()] = $aliases[$package->getName()];
+                }
+            }
+        }
+
+        return $usedAliases;
+    }
 }

+ 1 - 1
src/Composer/Installer.php

@@ -497,7 +497,7 @@ class Installer
             $lockTransaction->getNewLockPackages(true, $this->updateMirrors),
             $platformReqs,
             $platformDevReqs,
-            $aliases,
+            $lockTransaction->getAliases($aliases),
             $this->package->getMinimumStability(),
             $this->package->getStabilityFlags(),
             $this->preferStable || $this->package->getPreferStable(),

+ 15 - 24
tests/Composer/Test/Fixtures/installer/update-allow-list-with-dependencies-alias.test

@@ -1,5 +1,5 @@
 --TEST--
-Require a new package in the composer.json and updating with its name as an argument and with-dependencies should update locked dependencies as far as possible
+Verify that a partial update with deps correctly keeps track of all aliases.
 --COMPOSER--
 {
     "repositories": [
@@ -11,15 +11,16 @@ Require a new package in the composer.json and updating with its name as an argu
                 { "name": "current/dep", "version": "1.0.0" },
                 { "name": "current/dep", "version": "1.1.0", "require": {"current/dep2": "*"} },
                 { "name": "current/dep", "version": "1.2.0" },
-                { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}},
-                { "name": "new/pkg", "version": "1.0.0", "require": { "current/dep": "^1.1", "current/dep2": "*"} },
+                { "name": "current/dep2", "version": "dev-foo", "extra": {"branch-alias": {"dev-foo": "1.0.x-dev"}}},
+                { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "2.x-dev"}}},
+                { "name": "new/pkg", "version": "1.0.0", "require": { "current/dep": "^1.1", "current/dep2": "^1.1"} },
                 { "name": "new/pkg", "version": "1.1.0", "require": { "current/dep": "^1.2" } }
             ]
         }
     ],
     "require": {
         "current/dep": "dev-master as 1.1.0",
-        "current/dep2": "dev-master as 1.1.0",
+        "current/dep2": "dev-master as 1.1.2",
         "current/pkg": "1.0.0 as 2.0.0",
         "new/pkg": "1.*"
     },
@@ -28,14 +29,14 @@ Require a new package in the composer.json and updating with its name as an argu
 --INSTALLED--
 [
     { "name": "current/dep", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}},
-    { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}},
+    { "name": "current/dep2", "version": "dev-foo", "extra": {"branch-alias": {"dev-foo": "1.0.x-dev"}}},
     { "name": "current/pkg", "version": "1.0.0", "require": { "current/dep": "<1.2.0" } }
 ]
 --LOCK--
 {
     "packages": [
         { "name": "current/dep", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}, "type": "library"},
-        { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}, "type": "library"},
+        { "name": "current/dep2", "version": "dev-foo", "extra": {"branch-alias": {"dev-foo": "1.0.x-dev"}}, "type": "library"},
         { "name": "current/pkg", "version": "1.0.0", "require": { "current/dep": "<1.2.0" } }
     ],
     "packages-dev": [],
@@ -45,12 +46,6 @@ Require a new package in the composer.json and updating with its name as an argu
             "alias_normalized": "1.1.0.0",
             "version": "dev-master",
             "package": "current/dep"
-        },
-        {
-            "alias": "1.1.0",
-            "alias_normalized": "1.1.0.0",
-            "version": "dev-master",
-            "package": "current/dep2"
         }
     ],
     "minimum-stability": "dev",
@@ -66,9 +61,9 @@ update new/pkg --with-all-dependencies
 {
     "packages": [
         { "name": "current/dep", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}, "type": "library"},
-        { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "1.0.x-dev"}}, "type": "library"},
+        { "name": "current/dep2", "version": "dev-master", "extra": {"branch-alias": {"dev-master": "2.x-dev"}}, "type": "library"},
         { "name": "current/pkg", "version": "1.0.0", "require": { "current/dep": "<1.2.0" }, "type": "library"},
-        { "name": "new/pkg", "version": "1.0.0", "require": { "current/dep": "^1.1", "current/dep2": "*"}, "type": "library"}
+        { "name": "new/pkg", "version": "1.0.0", "require": { "current/dep": "^1.1", "current/dep2": "^1.1"}, "type": "library"}
     ],
     "packages-dev": [],
     "aliases": [
@@ -79,16 +74,10 @@ update new/pkg --with-all-dependencies
             "package": "current/dep"
         },
         {
-            "alias": "1.1.0",
-            "alias_normalized": "1.1.0.0",
+            "alias": "1.1.2",
+            "alias_normalized": "1.1.2.0",
             "version": "dev-master",
             "package": "current/dep2"
-        },
-        {
-            "alias": "2.0.0",
-            "alias_normalized": "2.0.0.0",
-            "version": "1.0.0.0",
-            "package": "current/pkg"
         }
     ],
     "minimum-stability": "dev",
@@ -103,6 +92,8 @@ update new/pkg --with-all-dependencies
 }
 --EXPECT--
 Marking current/dep (1.1.0) as installed, alias of current/dep (dev-master)
-Marking current/pkg (2.0.0) as installed, alias of current/pkg (1.0.0)
-Marking current/dep2 (1.1.0) as installed, alias of current/dep2 (dev-master)
+Upgrading current/dep2 (dev-foo => dev-master)
+Marking current/dep2 (1.1.2) as installed, alias of current/dep2 (dev-master)
+Marking current/dep2 (2.x-dev) as installed, alias of current/dep2 (dev-master)
 Installing new/pkg (1.0.0)
+Marking current/dep2 (1.0.x-dev) as uninstalled, alias of current/dep2 (dev-foo)