diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index 496edcaaf..b35d774df 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -438,11 +438,40 @@ EOT } $versionParser = new VersionParser(); + + $composer = $this->getComposer(false); + $installedRepo = ($composer) ? $composer->getRepositoryManager()->getLocalRepository() : null; $io = $this->getIO(); while (null !== $package = $io->ask('Search for a package: ')) { $matches = $this->findPackages($package); 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. + if (!empty($existingPackages)) { + foreach ($existingPackages as $position) { + unset($matches[$position]); + } + $matches = array_values($matches); + } + $exactMatch = null; $choices = array(); foreach ($matches as $position => $foundPackage) { @@ -794,7 +823,13 @@ EOT } $similarPackages = array(); + $installedRepo = $this->getComposer()->getRepositoryManager()->getLocalRepository(); + foreach ($results as $result) { + if ($installedRepo->findPackage($result['name'], '*')) { + // Ignore installed package + continue; + } $similarPackages[$result['name']] = levenshtein($package, $result['name']); } asort($similarPackages);