Browse Source

added a local option to the depends command

Bilal Amarni 12 years ago
parent
commit
4e02cbd49e
1 changed files with 21 additions and 6 deletions
  1. 21 6
      src/Composer/Command/DependsCommand.php

+ 21 - 6
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(<<<EOT
 Displays detailed information about where a package is referenced.
@@ -50,12 +50,21 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $composer = $this->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() . ' <info>' . $type . '</info> ' . $link->getPrettyConstraint());
                             } elseif (!isset($outputPackages[$package->getName()])) {
@@ -84,5 +95,9 @@ EOT
                 }
             });
         }
+
+        if (!$dependsOnPackages) {
+            $output->writeln('<info>There is no installed package depending on "'.$needle.'".</info>');
+        }
     }
 }