mirror of
https://github.com/composer/composer
synced 2025-05-10 09:02:59 +00:00
Move construction of pool from repo set into a pool builder
Pool construction depends on the install request now, so only required packages get loaded, add some structure for future asynchronously loading composer repositories
This commit is contained in:
parent
4c7d271a36
commit
c0f19f6c57
20 changed files with 357 additions and 248 deletions
|
@ -13,6 +13,8 @@
|
|||
namespace Composer\Repository;
|
||||
|
||||
use Composer\DependencyResolver\Pool;
|
||||
use Composer\DependencyResolver\PoolBuilder;
|
||||
use Composer\DependencyResolver\Request;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Package\Version\VersionParser;
|
||||
use Composer\Repository\CompositeRepository;
|
||||
|
@ -31,9 +33,6 @@ class RepositorySet
|
|||
/** @var RepositoryInterface[] */
|
||||
private $repositories = array();
|
||||
|
||||
/** @var ComposerRepository[] */
|
||||
private $providerRepos = array();
|
||||
|
||||
private $acceptableStabilities;
|
||||
private $stabilityFlags;
|
||||
protected $filterRequires;
|
||||
|
@ -79,9 +78,6 @@ class RepositorySet
|
|||
|
||||
foreach ($repos as $repo) {
|
||||
$this->repositories[] = $repo;
|
||||
if ($repo instanceof ComposerRepository && $repo->hasProviders()) {
|
||||
$this->providerRepos[] = $repo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,20 +129,43 @@ class RepositorySet
|
|||
return $candidates;
|
||||
}
|
||||
|
||||
public function getPriority(RepositoryInterface $repo)
|
||||
{
|
||||
$priority = array_search($repo, $this->repositories, true);
|
||||
|
||||
if (false === $priority) {
|
||||
throw new \RuntimeException("Could not determine repository priority. The repository was not registered in the pool.");
|
||||
}
|
||||
|
||||
return -$priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a pool for dependency resolution from the packages in this repository set.
|
||||
*
|
||||
* @return Pool
|
||||
*/
|
||||
public function createPool()
|
||||
public function createPool(Request $request)
|
||||
{
|
||||
$this->pool = new Pool($this->acceptableStabilities, $this->stabilityFlags, $this->filterRequires);
|
||||
$poolBuilder = new PoolBuilder(array($this, 'isPackageAcceptable'), $this->filterRequires);
|
||||
|
||||
foreach ($this->repositories as $repository) {
|
||||
$this->pool->addRepository($repository, $this->rootAliases);
|
||||
return $this->pool = $poolBuilder->buildPool($this->repositories, $this->rootAliases, $request);
|
||||
}
|
||||
|
||||
// TODO unify this with above in some simpler version without "request"?
|
||||
public function createPoolForPackage($packageName)
|
||||
{
|
||||
return $this->createPoolForPackages(array($packageName));
|
||||
}
|
||||
|
||||
public function createPoolForPackages($packageNames)
|
||||
{
|
||||
$request = new Request();
|
||||
foreach ($packageNames as $packageName) {
|
||||
$request->install($packageName);
|
||||
}
|
||||
|
||||
return $this->pool;
|
||||
return $this->createPool($request);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue