Browse Source

Separate createPool and createPoolWithAllPackages, fix test description

Nils Adermann 5 years ago
parent
commit
ee8df484c4

+ 1 - 1
src/Composer/Installer.php

@@ -565,7 +565,7 @@ class Installer
             $request->requireName($link->getTarget(), $link->getConstraint());
         }
 
-        $pool = $repositorySet->createPool($request, $this->eventDispatcher, true);
+        $pool = $repositorySet->createPoolWithAllPackages();
 
         $solver = new Solver($policy, $pool, $this->io, $repositorySet);
         try {

+ 22 - 8
src/Composer/Repository/RepositorySet.php

@@ -200,8 +200,10 @@ class RepositorySet
      *
      * @return Pool
      */
-    public function createPool(Request $request, EventDispatcher $eventDispatcher = null, $allPackages = false)
+    public function createPool(Request $request, EventDispatcher $eventDispatcher = null)
     {
+        $poolBuilder = new PoolBuilder($this->acceptableStabilities, $this->stabilityFlags, $this->rootAliases, $this->rootReferences, $eventDispatcher);
+
         foreach ($this->repositories as $repo) {
             if (($repo instanceof InstalledRepositoryInterface || $repo instanceof InstalledRepository) && !$this->allowInstalledRepositories) {
                 throw new \LogicException('The pool can not accept packages from an installed repository');
@@ -210,17 +212,29 @@ class RepositorySet
 
         $this->locked = true;
 
-        if ($allPackages) {
-            $packages = array();
-            foreach ($this->repositories as $repository) {
-                $packages = array_merge($packages, $repository->getPackages());
+        return $poolBuilder->buildPool($this->repositories, $request);
+    }
+
+    /**
+     * Create a pool for dependency resolution from the packages in this repository set.
+     *
+     * @return Pool
+     */
+    public function createPoolWithAllPackages()
+    {
+        foreach ($this->repositories as $repo) {
+            if (($repo instanceof InstalledRepositoryInterface || $repo instanceof InstalledRepository) && !$this->allowInstalledRepositories) {
+                throw new \LogicException('The pool can not accept packages from an installed repository');
             }
-            return new Pool($packages);
         }
 
-        $poolBuilder = new PoolBuilder($this->acceptableStabilities, $this->stabilityFlags, $this->rootAliases, $this->rootReferences, $eventDispatcher);
+        $this->locked = true;
 
-        return $poolBuilder->buildPool($this->repositories, $request);
+        $packages = array();
+        foreach ($this->repositories as $repository) {
+            $packages = array_merge($packages, $repository->getPackages());
+        }
+        return new Pool($packages);
     }
 
     // TODO unify this with above in some simpler version without "request"?

+ 1 - 1
tests/Composer/Test/Fixtures/installer/provider-dev-require-can-satisfy-require.test

@@ -1,5 +1,5 @@
 --TEST--
-Test that an appropriate error is thrown if a requirement is only satisfied by a package provided by a dependency of a dev requirement.
+Test that a requirement can be satisfied by a providing package required in require-dev.
 --COMPOSER--
 {
     "repositories": [