소스 검색

Show suggestions from root package in suggest, and lists them in count only on first install of a project, fixes #8805

Jordi Boggiano 5 년 전
부모
커밋
9b8694bc0b
3개의 변경된 파일12개의 추가작업 그리고 4개의 파일을 삭제
  1. 3 1
      src/Composer/Command/SuggestsCommand.php
  2. 5 0
      src/Composer/Installer.php
  3. 4 3
      src/Composer/Installer/SuggestedPackagesReporter.php

+ 3 - 1
src/Composer/Command/SuggestsCommand.php

@@ -71,7 +71,9 @@ EOT
         $reporter = new SuggestedPackagesReporter($this->getIO());
 
         $filter = $input->getArgument('packages');
-        foreach ($installedRepo->getPackages() as $package) {
+        $packages = $installedRepo->getPackages();
+        $packages[] = $composer->getPackage();
+        foreach ($packages as $package) {
             if (!empty($filter) && !in_array($package->getName(), $filter)) {
                 continue;
             }

+ 5 - 0
src/Composer/Installer.php

@@ -203,6 +203,8 @@ class Installer
             throw new \RuntimeException("The installer options updateMirrors and updateAllowList are mutually exclusive.");
         }
 
+        $isFreshInstall = $this->repositoryManager->getLocalRepository()->isFresh();
+
         // Force update if there is no lock file present
         if (!$this->update && !$this->locker->isLocked()) {
             $this->io->writeError('<warning>No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file.</warning>');
@@ -264,6 +266,9 @@ class Installer
                 $this->createPlatformRepo(false),
                 new RootPackageRepository(clone $this->package),
             ));
+            if ($isFreshInstall) {
+                $this->suggestedPackagesReporter->addSuggestionsFromPackage($this->package);
+            }
             $this->suggestedPackagesReporter->outputMinimalistic($installedRepo);
         }
 

+ 4 - 3
src/Composer/Installer/SuggestedPackagesReporter.php

@@ -100,7 +100,7 @@ class SuggestedPackagesReporter
      *
      * @param  int                       $mode             One of the MODE_* constants from this class
      * @param  InstalledRepository       $installedRepo    If passed in, suggested packages which are installed already will be skipped
-     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown
+     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown
      * @return SuggestedPackagesReporter
      */
     public function output($mode, InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null)
@@ -168,7 +168,7 @@ class SuggestedPackagesReporter
      * Output number of new suggested packages and a hint to use suggest command.
      *
      * @param  InstalledRepository       $installedRepo    If passed in, suggested packages which are installed already will be skipped
-     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown
+     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown
      * @return SuggestedPackagesReporter
      */
     public function outputMinimalistic(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null)
@@ -183,7 +183,7 @@ class SuggestedPackagesReporter
 
     /**
      * @param  InstalledRepository       $installedRepo    If passed in, suggested packages which are installed already will be skipped
-     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown
+     * @param  PackageInterface          $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown
      * @return array[]
      */
     private function getFilteredSuggestions(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null)
@@ -204,6 +204,7 @@ class SuggestedPackagesReporter
             $sourceFilter = array_map(function ($link) {
                 return $link->getTarget();
             }, array_merge($onlyDependentsOf->getRequires(), $onlyDependentsOf->getDevRequires()));
+            $sourceFilter[] = $onlyDependentsOf->getName();
         }
 
         $suggestions = array();