diff --git a/src/Composer/Command/DependsCommand.php b/src/Composer/Command/DependsCommand.php index cc1a2f980..fce6f9032 100644 --- a/src/Composer/Command/DependsCommand.php +++ b/src/Composer/Command/DependsCommand.php @@ -12,7 +12,7 @@ namespace Composer\Command; -use Composer\Composer; +use Composer\DependencyResolver\Pool; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; @@ -36,7 +36,7 @@ class DependsCommand extends Command ->setDescription('Shows which packages depend on the given package') ->setDefinition(array( new InputArgument('package', InputArgument::REQUIRED, 'Package to inspect'), - new InputOption('link-type', '', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Link types to show (require, require-dev)', array_keys($this->linkTypes)) + new InputOption('link-type', '', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Link types to show (require, require-dev)', array_keys($this->linkTypes)), )) ->setHelp(<<getComposer(); - $repos = $composer->getRepositoryManager()->getRepositories(); + $repos = $this->getComposer()->getRepositoryManager()->getLocalRepositories(); + $needle = $input->getArgument('package'); + + $pool = new Pool(); + foreach ($repos as $repo) { + $pool->addRepository($repo); + } + + $packages = $pool->whatProvides($needle); + if (empty($packages)) { + throw new \InvalidArgumentException('Could not find package "'.$needle.'" in your project.'); + } $linkTypes = $this->linkTypes; - $needle = $input->getArgument('package'); $verbose = (bool) $input->getOption('verbose'); $types = array_map(function ($type) use ($linkTypes) { $type = rtrim($type, 's'); @@ -66,13 +75,15 @@ EOT return $type; }, $input->getOption('link-type')); + $dependsOnPackages = false; foreach ($repos as $repo) { - $repo->filterPackages(function ($package) use ($needle, $types, $linkTypes, $output, $verbose) { + $repo->filterPackages(function ($package) use ($needle, $types, $linkTypes, $output, $verbose, &$dependsOnPackages) { static $outputPackages = array(); foreach ($types as $type) { foreach ($package->{'get'.$linkTypes[$type]}() as $link) { if ($link->getTarget() === $needle) { + $dependsOnPackages = true; if ($verbose) { $output->writeln($package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' ' . $type . ' ' . $link->getPrettyConstraint()); } elseif (!isset($outputPackages[$package->getName()])) { @@ -84,5 +95,9 @@ EOT } }); } + + if (!$dependsOnPackages) { + $output->writeln('There is no installed package depending on "'.$needle.'".'); + } } }