|
@@ -45,6 +45,7 @@ class Pool
|
|
protected $providerRepos = array();
|
|
protected $providerRepos = array();
|
|
protected $packages = array();
|
|
protected $packages = array();
|
|
protected $packageByName = array();
|
|
protected $packageByName = array();
|
|
|
|
+ protected $packageByExactName = array();
|
|
protected $acceptableStabilities;
|
|
protected $acceptableStabilities;
|
|
protected $stabilityFlags;
|
|
protected $stabilityFlags;
|
|
protected $versionParser;
|
|
protected $versionParser;
|
|
@@ -122,6 +123,7 @@ class Pool
|
|
$package['id'] = $this->id++;
|
|
$package['id'] = $this->id++;
|
|
$package['stability'] = $stability;
|
|
$package['stability'] = $stability;
|
|
$this->packages[] = $package;
|
|
$this->packages[] = $package;
|
|
|
|
+ $this->packageByExactName[$package->getName()][$package['id']] = $this->packages[$this->id - 2];
|
|
|
|
|
|
foreach ($names as $provided) {
|
|
foreach ($names as $provided) {
|
|
$this->packageByName[$provided][$package['id']] = $this->packages[$this->id - 2];
|
|
$this->packageByName[$provided][$package['id']] = $this->packages[$this->id - 2];
|
|
@@ -144,6 +146,7 @@ class Pool
|
|
$alias['id'] = $this->id++;
|
|
$alias['id'] = $this->id++;
|
|
$alias['root_alias'] = true;
|
|
$alias['root_alias'] = true;
|
|
$this->packages[] = $alias;
|
|
$this->packages[] = $alias;
|
|
|
|
+ $this->packageByExactName[$package->getName()][$alias['id']] = $this->packages[$this->id - 2];
|
|
|
|
|
|
foreach ($names as $provided) {
|
|
foreach ($names as $provided) {
|
|
$this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
|
|
$this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
|
|
@@ -159,6 +162,7 @@ class Pool
|
|
$alias['alias_of'] = $package['id'];
|
|
$alias['alias_of'] = $package['id'];
|
|
$alias['id'] = $this->id++;
|
|
$alias['id'] = $this->id++;
|
|
$this->packages[] = $alias;
|
|
$this->packages[] = $alias;
|
|
|
|
+ $this->packageByExactName[$package->getName()][$alias['id']] = $this->packages[$this->id - 2];
|
|
|
|
|
|
foreach ($names as $provided) {
|
|
foreach ($names as $provided) {
|
|
$this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
|
|
$this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
|
|
@@ -173,6 +177,7 @@ class Pool
|
|
if ($exempt || $this->isPackageAcceptable($names, $stability)) {
|
|
if ($exempt || $this->isPackageAcceptable($names, $stability)) {
|
|
$package->setId($this->id++);
|
|
$package->setId($this->id++);
|
|
$this->packages[] = $package;
|
|
$this->packages[] = $package;
|
|
|
|
+ $this->packageByExactName[$package->getName()][$package->getId()] = $package;
|
|
|
|
|
|
foreach ($names as $provided) {
|
|
foreach ($names as $provided) {
|
|
$this->packageByName[$provided][] = $package;
|
|
$this->packageByName[$provided][] = $package;
|
|
@@ -191,6 +196,7 @@ class Pool
|
|
|
|
|
|
$package->getRepository()->addPackage($aliasPackage);
|
|
$package->getRepository()->addPackage($aliasPackage);
|
|
$this->packages[] = $aliasPackage;
|
|
$this->packages[] = $aliasPackage;
|
|
|
|
+ $this->packageByExactName[$aliasPackage->getName()][$aliasPackage->getId()] = $aliasPackage;
|
|
|
|
|
|
foreach ($aliasPackage->getNames() as $name) {
|
|
foreach ($aliasPackage->getNames() as $name) {
|
|
$this->packageByName[$name][] = $aliasPackage;
|
|
$this->packageByName[$name][] = $aliasPackage;
|
|
@@ -261,8 +267,17 @@ class Pool
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (isset($this->packageByName[$name])) {
|
|
|
|
- $candidates = array_merge($candidates, $this->packageByName[$name]);
|
|
|
|
|
|
+ if ($mustMatchName) {
|
|
|
|
+ $candidates = array_filter($candidates, function ($candidate) use ($name) {
|
|
|
|
+ return $candidate->getName() == $name;
|
|
|
|
+ });
|
|
|
|
+ if (isset($this->packageByExactName[$name])) {
|
|
|
|
+ $candidates = array_merge($candidates, $this->packageByExactName[$name]);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (isset($this->packageByName[$name])) {
|
|
|
|
+ $candidates = array_merge($candidates, $this->packageByName[$name]);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
$matches = $provideMatches = array();
|
|
$matches = $provideMatches = array();
|
|
@@ -313,12 +328,6 @@ class Pool
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if ($mustMatchName) {
|
|
|
|
- return array_filter($matches, function ($match) use ($name) {
|
|
|
|
- return $match->getName() == $name;
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// if a package with the required name exists, we ignore providers
|
|
// if a package with the required name exists, we ignore providers
|
|
if ($nameMatch) {
|
|
if ($nameMatch) {
|
|
return $matches;
|
|
return $matches;
|