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;
}
}