diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index f4d6d99d3..7efdff049 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -792,7 +792,13 @@ EOT } $similarPackages = array(); + $installedRepo = $this->getComposer()->getRepositoryManager()->getLocalRepository(); + foreach ($results as $result) { + if ($installedRepo->hasPackageName($result['name'])) { + // Ignore installed package + continue; + } $similarPackages[$result['name']] = levenshtein($package, $result['name']); } asort($similarPackages); diff --git a/src/Composer/Repository/ArrayRepository.php b/src/Composer/Repository/ArrayRepository.php index 4f0409a60..4cfbe42f9 100644 --- a/src/Composer/Repository/ArrayRepository.php +++ b/src/Composer/Repository/ArrayRepository.php @@ -132,6 +132,20 @@ class ArrayRepository extends BaseRepository return false; } + /** + * {@inheritDoc} + */ + public function hasPackageName(string $packageName) + { + foreach ($this->getPackages() as $repoPackage) { + if ($packageName === $repoPackage->getName()) { + return true; + } + } + + return false; + } + /** * Adds a new package to the repository * diff --git a/src/Composer/Repository/CompositeRepository.php b/src/Composer/Repository/CompositeRepository.php index ce57504f0..c19a04a7b 100644 --- a/src/Composer/Repository/CompositeRepository.php +++ b/src/Composer/Repository/CompositeRepository.php @@ -64,6 +64,21 @@ class CompositeRepository extends BaseRepository return false; } + /** + * {@inheritdoc} + */ + public function hasPackageName(string $packageName) + { + foreach ($this->repositories as $repository) { + /* @var $repository RepositoryInterface */ + if ($repository->hasPackageName($packageName)) { + return true; + } + } + + return false; + } + /** * {@inheritdoc} */ diff --git a/src/Composer/Repository/RepositoryInterface.php b/src/Composer/Repository/RepositoryInterface.php index 9a2aaf3b5..8e1717fce 100644 --- a/src/Composer/Repository/RepositoryInterface.php +++ b/src/Composer/Repository/RepositoryInterface.php @@ -35,6 +35,15 @@ interface RepositoryInterface extends \Countable */ public function hasPackage(PackageInterface $package); + /** + * Checks if specified package name is registered (installed). + * + * @param string $package_name package name (vendor/project) + * + * @return bool + */ + public function hasPackageName(string $packageName); + /** * Searches for the first match of a package by name and version. *