Browse Source

Merge remote-tracking branch 'trompette/license-tools'

Jordi Boggiano 12 years ago
parent
commit
b0e72f0910
2 changed files with 99 additions and 0 deletions
  1. 98 0
      src/Composer/Command/LicensesCommand.php
  2. 1 0
      src/Composer/Console/Application.php

+ 98 - 0
src/Composer/Command/LicensesCommand.php

@@ -0,0 +1,98 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Composer\Package\PackageInterface;
+use Composer\Package\Version\VersionParser;
+use Symfony\Component\Console\Helper\TableHelper;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * @author Benoît Merlet <benoit.merlet@gmail.com>
+ */
+class LicensesCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('licenses')
+            ->setDescription('Show information about licenses of dependencies')
+            ->setDefinition(array(
+                new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text'),
+            ))
+            ->setHelp(<<<EOT
+The license command displays detailed information about the licenses of
+the installed dependencies.
+
+EOT
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $root = $this->getComposer()->getPackage();
+        $repo = $this->getComposer()->getRepositoryManager()->getLocalRepository();
+
+        $versionParser = new VersionParser;
+
+        foreach ($repo->getPackages() as $package) {
+            $packages[$package->getName()] = $package;
+        }
+
+        ksort($packages);
+
+        switch ($format = $input->getOption('format')) {
+            case 'text':
+                $output->writeln('Name: <comment>'.$root->getPrettyName().'</comment>');
+                $output->writeln('Version: <comment>'.$versionParser->formatVersion($root).'</comment>');
+                $output->writeln('Licenses: <comment>'.(implode(', ', $root->getLicense()) ?: 'none').'</comment>');
+                $output->writeln('Dependencies:');
+
+                $table = $this->getHelperSet()->get('table');
+                $table->setLayout(TableHelper::LAYOUT_BORDERLESS);
+                $table->setHorizontalBorderChar('');
+                foreach ($packages as $package) {
+                    $table->addRow(array(
+                        $package->getPrettyName(),
+                        $versionParser->formatVersion($package),
+                        implode(', ', $package->getLicense()) ?: 'none',
+                    ));
+                }
+                $table->render($output);
+                break;
+
+            case 'json':
+                foreach ($packages as $package) {
+                    $dependencies[$package->getPrettyName()] = array(
+                        'version' => $versionParser->formatVersion($package),
+                        'license' => $package->getLicense(),
+                    );
+                }
+
+                $output->writeln(json_encode(array(
+                    'name'         => $root->getPrettyName(),
+                    'version'      => $versionParser->formatVersion($root),
+                    'license'      => $root->getLicense(),
+                    'dependencies' => $dependencies,
+                )));
+                break;
+
+            default:
+                throw new \RuntimeException(sprintf('Unsupported format "%s".  See help for supported formats.', $format));
+        }
+    }
+}

+ 1 - 0
src/Composer/Console/Application.php

@@ -224,6 +224,7 @@ class Application extends BaseApplication
         $commands[] = new Command\ArchiveCommand();
         $commands[] = new Command\ArchiveCommand();
         $commands[] = new Command\DiagnoseCommand();
         $commands[] = new Command\DiagnoseCommand();
         $commands[] = new Command\RunScriptCommand();
         $commands[] = new Command\RunScriptCommand();
+        $commands[] = new Command\LicensesCommand();
 
 
         if ('phar:' === substr(__FILE__, 0, 5)) {
         if ('phar:' === substr(__FILE__, 0, 5)) {
             $commands[] = new Command\SelfUpdateCommand();
             $commands[] = new Command\SelfUpdateCommand();