فهرست منبع

Hide installed packages from suggestions when package is not found

xy2z 5 سال پیش
والد
کامیت
a8abdd9639

+ 6 - 0
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);

+ 14 - 0
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
      *

+ 15 - 0
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}
      */

+ 9 - 0
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.
      *