소스 검색

Update all whitelist matching root dependencies

The update command can receive a pattern like `vendor/prefix-*`
to update all matching packages.
This has not worked if multiple packages, depending on each other,
where matched to the given pattern. No package has been updated
in this case as only the first package matching the pattern was
added to the whitelist.
Sascha Egerer 6 년 전
부모
커밋
50cb5fe3da
2개의 변경된 파일46개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      src/Composer/Installer.php
  2. 45 0
      tests/Composer/Test/Fixtures/installer/update-whitelist-patterns-with-root-dependencies.test

+ 1 - 1
src/Composer/Installer.php

@@ -1332,8 +1332,8 @@ class Installer
                 $whitelistPatternRegexp = BasePackage::packageNameToRegexp($packageName);
                 foreach ($rootRequiredPackageNames as $rootRequiredPackageName) {
                     if (preg_match($whitelistPatternRegexp, $rootRequiredPackageName)) {
+                        $depPackages = array_merge($pool->whatProvides($rootRequiredPackageName));
                         $nameMatchesRequiredPackage = true;
-                        break;
                     }
                 }
             }

+ 45 - 0
tests/Composer/Test/Fixtures/installer/update-whitelist-patterns-with-root-dependencies.test

@@ -0,0 +1,45 @@
+--TEST--
+Update with a package whitelist only updates those packages and their dependencies matching the pattern
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "fixed", "version": "1.1.0" },
+                { "name": "fixed", "version": "1.0.0" },
+                { "name": "whitelisted-component1", "version": "1.1.0", "require": { "whitelisted-component2": "1.1.0" } },
+                { "name": "whitelisted-component1", "version": "1.0.0", "require": { "whitelisted-component2": "1.0.0" } },
+                { "name": "whitelisted-component2", "version": "1.1.0", "require": { "dependency": "1.1.0" } },
+                { "name": "whitelisted-component2", "version": "1.0.0", "require": { "dependency": "1.0.0" } },
+                { "name": "dependency", "version": "1.1.0" },
+                { "name": "dependency", "version": "1.0.0" },
+                { "name": "unrelated", "version": "1.1.0", "require": { "unrelated-dependency": "1.*" }  },
+                { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" }  },
+                { "name": "unrelated-dependency", "version": "1.1.0" },
+                { "name": "unrelated-dependency", "version": "1.0.0" }
+            ]
+        }
+    ],
+    "require": {
+        "fixed": "1.*",
+        "whitelisted-component1": "1.*",
+        "whitelisted-component2": "1.*",
+        "unrelated": "1.*"
+    }
+}
+--INSTALLED--
+[
+    { "name": "fixed", "version": "1.0.0" },
+    { "name": "whitelisted-component1", "version": "1.0.0", "require": { "whitelisted-component2": "1.0.0" } },
+    { "name": "whitelisted-component2", "version": "1.0.0", "require": { "dependency": "1.0.0" } },
+    { "name": "dependency", "version": "1.0.0" },
+    { "name": "unrelated", "version": "1.0.0", "require": { "unrelated-dependency": "1.*" } },
+    { "name": "unrelated-dependency", "version": "1.0.0" }
+]
+--RUN--
+update whitelisted-* --with-dependencies
+--EXPECT--
+Updating dependency (1.0.0) to dependency (1.1.0)
+Updating whitelisted-component2 (1.0.0) to whitelisted-component2 (1.1.0)
+Updating whitelisted-component1 (1.0.0) to whitelisted-component1 (1.1.0)