Bladeren bron

Merge pull request #3982 from Seldaek/prioritize-repos-over-versions

Prioritize repository over package versions in the default policy
Jordi Boggiano 10 jaren geleden
bovenliggende
commit
6d76142907

+ 7 - 7
doc/dev/DefaultPolicy.md

@@ -12,6 +12,13 @@ resulting order in which the solver will try to install them.
 
 
 The rules are to be applied in the order of these descriptions.
 The rules are to be applied in the order of these descriptions.
 
 
+### Repository priorities
+
+Packages Repo1.Av1, Repo2.Av1
+
+* priority(Repo1) >= priority(Repo2) => (Repo1.Av1, Repo2.Av1)
+* priority(Repo1) <  priority(Repo2) => (Repo2.Av1, Repo1.Av1)
+
 ### Package versions
 ### Package versions
 
 
 Packages: Av1, Av2, Av3
 Packages: Av1, Av2, Av3
@@ -22,13 +29,6 @@ Request: install A
 
 
 * (Av3)
 * (Av3)
 
 
-### Repository priorities
-
-Packages Repo1.Av1, Repo2.Av1
-
-* priority(Repo1) >= priority(Repo2) => (Repo1.Av1, Repo2.Av1)
-* priority(Repo1) <  priority(Repo2) => (Repo2.Av1, Repo1.Av1)
-
 ### Virtual Packages (provides)
 ### Virtual Packages (provides)
 
 
 Packages Av1, Bv1
 Packages Av1, Bv1

+ 2 - 2
src/Composer/DependencyResolver/DefaultPolicy.php

@@ -82,10 +82,10 @@ class DefaultPolicy implements PolicyInterface
         }
         }
 
 
         foreach ($packages as &$literals) {
         foreach ($packages as &$literals) {
-            $literals = $this->pruneToBestVersion($pool, $literals);
-
             $literals = $this->pruneToHighestPriorityOrInstalled($pool, $installedMap, $literals);
             $literals = $this->pruneToHighestPriorityOrInstalled($pool, $installedMap, $literals);
 
 
+            $literals = $this->pruneToBestVersion($pool, $literals);
+
             $literals = $this->pruneRemoteAliases($pool, $literals);
             $literals = $this->pruneRemoteAliases($pool, $literals);
         }
         }
 
 

+ 30 - 0
tests/Composer/Test/Fixtures/installer/install-prefers-repos-over-package-versions.test

@@ -0,0 +1,30 @@
+--TEST--
+Install prefers higher priority repositories over higher priority package versions
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0" }
+            ]
+        },
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.1.0" },
+                { "name": "b/b", "version": "1.1.0" },
+                { "name": "b/b", "version": "1.0.0" }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "*",
+        "b/b": "*"
+    }
+}
+--RUN--
+install
+--EXPECT--
+Installing a/a (1.0.0)
+Installing b/b (1.1.0)