1
0
Fork 0

Collect existing packages only once, refs #8372

pull/8538/head
Jordi Boggiano 2020-01-14 14:41:31 +01:00
parent c0714e5ff8
commit 669033f1e7
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC
1 changed files with 17 additions and 22 deletions

View File

@ -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, ' '));
} }
} }
} }