SuggestsCommand.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer\Command;
  12. use Symfony\Component\Console\Input\InputArgument;
  13. use Symfony\Component\Console\Input\InputInterface;
  14. use Symfony\Component\Console\Input\InputOption;
  15. use Symfony\Component\Console\Output\ConsoleOutputInterface;
  16. use Symfony\Component\Console\Output\OutputInterface;
  17. use Symfony\Component\Finder\Exception\AccessDeniedException;
  18. class SuggestsCommand extends Command
  19. {
  20. protected function configure()
  21. {
  22. $this
  23. ->setName('suggests')
  24. ->setDescription('Show package suggestions')
  25. ->setDefinition(array(
  26. new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Exclude suggestions from require-dev packages'),
  27. new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Packages that you want to list suggestions from.'),
  28. ))
  29. ->setHelp(<<<EOT
  30. The <info>%command.name%</info> command shows suggested packages.
  31. EOT
  32. )
  33. ;
  34. }
  35. protected function execute(InputInterface $input, OutputInterface $output)
  36. {
  37. $lock = $this->getComposer()->getLocker()->getLockData();
  38. if (empty($lock)) {
  39. throw new \RuntimeException('Lockfile seems to be empty?');
  40. }
  41. $stderr = $output;
  42. if ($output instanceof ConsoleOutputInterface) {
  43. $stderr = $output->getErrorOutput();
  44. }
  45. $list = $lock['packages'];
  46. if (!$input->getOption('no-dev')) {
  47. $list += $lock['packages-dev'];
  48. }
  49. $packages = $input->getArgument('packages');
  50. foreach ($list as $package) {
  51. if (!empty($package['suggest']) && (empty($packages) || in_array($package['name'], $packages))) {
  52. $stderr->writeln(sprintf('%s suggests:', $package['name']));
  53. foreach ($package['suggest'] as $target => $reason) {
  54. if (empty($reason)) {
  55. $reason = '*';
  56. }
  57. $output->writeln(sprintf('<info>%s</info>: <comment>%s</comment>', $target, $reason));
  58. }
  59. }
  60. }
  61. }
  62. }