From 049f84f21f61c0bcb2298c31b9eb2d14e64d48bb Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Thu, 18 Jun 2015 16:33:30 +0100 Subject: [PATCH] Remove unnecessary Pool usage in HomeCommand --- src/Composer/Command/HomeCommand.php | 81 ++++++++++++---------------- 1 file changed, 33 insertions(+), 48 deletions(-) diff --git a/src/Composer/Command/HomeCommand.php b/src/Composer/Command/HomeCommand.php index 51a135c68..b20e661f9 100644 --- a/src/Composer/Command/HomeCommand.php +++ b/src/Composer/Command/HomeCommand.php @@ -12,11 +12,11 @@ namespace Composer\Command; -use Composer\DependencyResolver\Pool; use Composer\Factory; use Composer\Package\CompletePackageInterface; use Composer\Repository\CompositeRepository; use Composer\Repository\RepositoryInterface; +use Composer\Repository\ArrayRepository; use Composer\Util\ProcessExecutor; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; @@ -61,67 +61,51 @@ EOT $return = 0; foreach ($input->getArgument('packages') as $packageName) { + $handled = false; + $packageExists = false; foreach ($repos as $repo) { - $package = $this->getPackage($repo, $packageName); - if ($package instanceof CompletePackageInterface) { - break; + foreach ($repo->findPackages($packageName) as $package) { + $packageExists = true; + if ($this->handlePackage($package, $input->getOption('homepage'), $input->getOption('show'))) { + $handled = true; + break 2; + } } } - $package = $this->getPackage($repo, $packageName); - if (!$package instanceof CompletePackageInterface) { + if (!$packageExists) { $return = 1; $this->getIO()->writeError('Package '.$packageName.' not found'); - - continue; } - $support = $package->getSupport(); - $url = isset($support['source']) ? $support['source'] : $package->getSourceUrl(); - if (!$url || $input->getOption('homepage')) { - $url = $package->getHomepage(); - } - - if (!filter_var($url, FILTER_VALIDATE_URL)) { + if (!$handled) { $return = 1; $this->getIO()->writeError(''.($input->getOption('homepage') ? 'Invalid or missing homepage' : 'Invalid or missing repository URL').' for '.$packageName.''); - - continue; - } - - if ($input->getOption('show')) { - $this->getIO()->write(sprintf('%s', $url)); - } else { - $this->openBrowser($url); } } return $return; } - /** - * finds a package by name - * - * @param RepositoryInterface $repos - * @param string $name - * @return CompletePackageInterface - */ - protected function getPackage(RepositoryInterface $repos, $name) + private function handlePackage(CompletePackageInterface $package, $showHomepage, $showOnly) { - $name = strtolower($name); - $pool = new Pool('dev'); - $pool->addRepository($repos); - $matches = $pool->whatProvides($name); - - foreach ($matches as $index => $package) { - // skip providers/replacers - if ($package->getName() !== $name) { - unset($matches[$index]); - continue; - } - - return $package; + $support = $package->getSupport(); + $url = isset($support['source']) ? $support['source'] : $package->getSourceUrl(); + if (!$url || $showHomepage) { + $url = $package->getHomepage(); } + + if (!$url || !filter_var($url, FILTER_VALIDATE_URL)) { + return false; + } + + if ($showOnly) { + $this->getIO()->write(sprintf('%s', $url)); + } else { + $this->openBrowser($url); + } + + return true; } /** @@ -161,14 +145,15 @@ EOT $composer = $this->getComposer(false); if ($composer) { - return array( - $composer->getRepositoryManager()->getLocalRepository(), - new CompositeRepository($composer->getRepositoryManager()->getRepositories()) + return array_merge( + array(new ArrayRepository(array($composer->getPackage()))), // root package + array($composer->getRepositoryManager()->getLocalRepository()), // installed packages + $composer->getRepositoryManager()->getRepositories() // remotes ); } $defaultRepos = Factory::createDefaultRepositories($this->getIO()); - return array(new CompositeRepository($defaultRepos)); + return $defaultRepos; } }