Collect existing packages only once, refs #8372
parent
c0714e5ff8
commit
669033f1e7
|
@ -439,38 +439,32 @@ EOT
|
||||||
|
|
||||||
$versionParser = new VersionParser();
|
$versionParser = new VersionParser();
|
||||||
|
|
||||||
|
// Collect existing packages
|
||||||
$composer = $this->getComposer(false);
|
$composer = $this->getComposer(false);
|
||||||
$installedRepo = ($composer) ? $composer->getRepositoryManager()->getLocalRepository() : null;
|
$installedRepo = $composer ? $composer->getRepositoryManager()->getLocalRepository() : null;
|
||||||
|
$existingPackages = [];
|
||||||
|
if ($installedRepo) {
|
||||||
|
foreach ($installedRepo->getPackages() as $package) {
|
||||||
|
$existingPackages[] = $package->getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($requires as $requiredPackage) {
|
||||||
|
$existingPackages[] = substr($requiredPackage, 0, strpos($requiredPackage, ' '));
|
||||||
|
}
|
||||||
|
unset($composer, $installedRepo, $requiredPackage);
|
||||||
|
|
||||||
$io = $this->getIO();
|
$io = $this->getIO();
|
||||||
while (null !== $package = $io->ask('Search for a package: ')) {
|
while (null !== $package = $io->ask('Search for a package: ')) {
|
||||||
$matches = $this->findPackages($package);
|
$matches = $this->findPackages($package);
|
||||||
|
|
||||||
if (count($matches)) {
|
if (count($matches)) {
|
||||||
// Exclude existing packages
|
|
||||||
$existingPackages = [];
|
|
||||||
foreach ($matches as $position => $foundPackage) {
|
|
||||||
if ($installedRepo && $installedRepo->findPackage($foundPackage['name'], '*')) {
|
|
||||||
$existingPackages[] = $position;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($requires as $requiredPackage) {
|
|
||||||
$existingPackageName = substr($requiredPackage, 0, strpos($requiredPackage, ' '));
|
|
||||||
|
|
||||||
if ($foundPackage['name'] == $existingPackageName) {
|
|
||||||
$existingPackages[] = $position;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove existing packages from search results.
|
// Remove existing packages from search results.
|
||||||
if (!empty($existingPackages)) {
|
foreach ($matches as $position => $foundPackage) {
|
||||||
foreach ($existingPackages as $position) {
|
if (in_array($foundPackage['name'], $existingPackages, true)) {
|
||||||
unset($matches[$position]);
|
unset($matches[$position]);
|
||||||
}
|
}
|
||||||
$matches = array_values($matches);
|
|
||||||
}
|
}
|
||||||
|
$matches = array_values($matches);
|
||||||
|
|
||||||
$exactMatch = null;
|
$exactMatch = null;
|
||||||
$choices = array();
|
$choices = array();
|
||||||
|
@ -569,6 +563,7 @@ EOT
|
||||||
|
|
||||||
if (false !== $package) {
|
if (false !== $package) {
|
||||||
$requires[] = $package;
|
$requires[] = $package;
|
||||||
|
$existingPackages[] = substr($package, 0, strpos($package, ' '));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue