|
|
|
@ -13,6 +13,7 @@
|
|
|
|
|
namespace Composer\DependencyResolver;
|
|
|
|
|
|
|
|
|
|
use Composer\Package\BasePackage;
|
|
|
|
|
use Composer\Package\AliasPackage;
|
|
|
|
|
use Composer\Package\Version\VersionParser;
|
|
|
|
|
use Composer\Package\Loader\ArrayLoader;
|
|
|
|
|
use Composer\Package\Link;
|
|
|
|
@ -64,8 +65,9 @@ class Pool
|
|
|
|
|
* Adds a repository and its packages to this package pool
|
|
|
|
|
*
|
|
|
|
|
* @param RepositoryInterface $repo A package repository
|
|
|
|
|
* @param array $aliases
|
|
|
|
|
*/
|
|
|
|
|
public function addRepository(RepositoryInterface $repo)
|
|
|
|
|
public function addRepository(RepositoryInterface $repo, $aliases = array())
|
|
|
|
|
{
|
|
|
|
|
if ($repo instanceof CompositeRepository) {
|
|
|
|
|
$repos = $repo->getRepositories();
|
|
|
|
@ -81,7 +83,8 @@ class Pool
|
|
|
|
|
if ($repo instanceof StreamableRepositoryInterface) {
|
|
|
|
|
foreach ($repo->getMinimalPackages() as $package) {
|
|
|
|
|
$name = $package['name'];
|
|
|
|
|
$stability = VersionParser::parseStability($package['version']);
|
|
|
|
|
$version = $package['version'];
|
|
|
|
|
$stability = VersionParser::parseStability($version);
|
|
|
|
|
if (
|
|
|
|
|
// always allow exempt repos
|
|
|
|
|
$exempt
|
|
|
|
@ -114,6 +117,35 @@ class Pool
|
|
|
|
|
foreach (array_keys($names) as $name) {
|
|
|
|
|
$this->packageByName[$name][] =& $this->packages[$id-2];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle root package aliases
|
|
|
|
|
if (isset($aliases[$name][$version])) {
|
|
|
|
|
$alias = $package;
|
|
|
|
|
$alias['version'] = $aliases[$name][$version]['alias_normalized'];
|
|
|
|
|
$alias['alias'] = $aliases[$name][$version]['alias'];
|
|
|
|
|
$alias['alias_of'] = $package['id'];
|
|
|
|
|
$alias['id'] = $id++;
|
|
|
|
|
$alias['root_alias'] = true;
|
|
|
|
|
$this->packages[] = $alias;
|
|
|
|
|
|
|
|
|
|
foreach (array_keys($names) as $name) {
|
|
|
|
|
$this->packageByName[$name][] =& $this->packages[$id-2];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle normal package aliases
|
|
|
|
|
if (isset($package['alias'])) {
|
|
|
|
|
$alias = $package;
|
|
|
|
|
$alias['version'] = $package['alias_normalized'];
|
|
|
|
|
$alias['alias'] = $package['alias'];
|
|
|
|
|
$alias['alias_of'] = $package['id'];
|
|
|
|
|
$alias['id'] = $id++;
|
|
|
|
|
$this->packages[] = $alias;
|
|
|
|
|
|
|
|
|
|
foreach (array_keys($names) as $name) {
|
|
|
|
|
$this->packageByName[$name][] =& $this->packages[$id-2];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
@ -137,6 +169,22 @@ class Pool
|
|
|
|
|
foreach ($package->getNames() as $name) {
|
|
|
|
|
$this->packageByName[$name][] = $package;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handle root package aliases
|
|
|
|
|
if (isset($aliases[$name][$package->getVersion()])) {
|
|
|
|
|
$alias = $aliases[$name][$package->getVersion()];
|
|
|
|
|
$package->setAlias($alias['alias_normalized']);
|
|
|
|
|
$package->setPrettyAlias($alias['alias']);
|
|
|
|
|
$package->getRepository()->addPackage($aliasPackage = new AliasPackage($package, $alias['alias_normalized'], $alias['alias']));
|
|
|
|
|
$aliasPackage->setRootPackageAlias(true);
|
|
|
|
|
$aliasPackage->setId($id++);
|
|
|
|
|
|
|
|
|
|
$this->packages[] = $aliasPackage;
|
|
|
|
|
|
|
|
|
|
foreach ($aliasPackage->getNames() as $name) {
|
|
|
|
|
$this->packageByName[$name][] = $aliasPackage;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -267,7 +315,20 @@ class Pool
|
|
|
|
|
private function ensurePackageIsLoaded($data)
|
|
|
|
|
{
|
|
|
|
|
if (is_array($data)) {
|
|
|
|
|
$data = $this->packages[$data['id'] - 1] = $data['repo']->loadPackage($data, $data['id']);
|
|
|
|
|
if (isset($data['alias_of'])) {
|
|
|
|
|
// TODO move to $repo->loadAliasPackage?
|
|
|
|
|
$aliasOf = $this->packageById($data['alias_of']);
|
|
|
|
|
$rootAlias = !empty($data['root_alias']);
|
|
|
|
|
$package = $this->packages[$data['id'] - 1] = new AliasPackage($aliasOf, $data['version'], $data['alias']);
|
|
|
|
|
$package->setId($data['id']);
|
|
|
|
|
$package->setRootPackageAlias($rootAlias);
|
|
|
|
|
|
|
|
|
|
return $package;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$package = $this->packages[$data['id'] - 1] = $data['repo']->loadPackage($data, $data['id']);
|
|
|
|
|
|
|
|
|
|
return $package;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
|