ソースを参照

Merge remote-tracking branch 'xy2z/has-package-name'

Jordi Boggiano 5 年 前
コミット
c0714e5ff8
1 ファイル変更35 行追加0 行削除
  1. 35 0
      src/Composer/Command/InitCommand.php

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