From 6c870e23e0647821a449539c6fe56d9070ba7bad Mon Sep 17 00:00:00 2001 From: digitalkaoz Date: Tue, 6 Dec 2011 18:04:55 +0100 Subject: [PATCH] added search command, colorized ouput, tiny fixes --- src/Composer/Command/DebugPackagesCommand.php | 37 +++++++++-- src/Composer/Command/InstallCommand.php | 12 ++-- src/Composer/Command/SearchCommand.php | 63 +++++++++++++++++++ src/Composer/Command/SelfUpdateCommand.php | 4 +- src/Composer/Console/Application.php | 1 + 5 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 src/Composer/Command/SearchCommand.php diff --git a/src/Composer/Command/DebugPackagesCommand.php b/src/Composer/Command/DebugPackagesCommand.php index e609592a9..d7c2acdfa 100644 --- a/src/Composer/Command/DebugPackagesCommand.php +++ b/src/Composer/Command/DebugPackagesCommand.php @@ -20,6 +20,7 @@ use Composer\DependencyResolver\Operation; use Composer\Package\LinkConstraint\VersionConstraint; use Composer\Repository\PlatformRepository; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** @@ -32,6 +33,10 @@ class DebugPackagesCommand extends Command $this ->setName('debug:packages') ->setDescription('Lists all existing packages and their version') + ->setDefinition(array( + new InputOption('local', null, InputOption::VALUE_NONE, 'list locally installed packages only'), + new InputOption('platform', null, InputOption::VALUE_NONE, 'list platform packages only'), + )) ->setHelp(<<php composer.phar debug:packages @@ -45,18 +50,40 @@ EOT $composer = $this->getComposer(); // create local repo, this contains all packages that are installed in the local project - $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + $localRepo = $composer->getRepositoryManager()->getLocalRepository(); // create installed repo, this contains all local packages + platform packages (php & extensions) - $installedRepo = new PlatformRepository($localRepo); + $installedRepo = new PlatformRepository($localRepo); + + if ($input->getOption('local')) { + foreach ($localRepo->getPackages() as $package) { + $output->writeln('local: ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' (' . $package->getVersion() . ')'); + } + + return; + } + + if ($input->getOption('platform')) { + $repos = array_diff($installedRepo->getPackages(), $localRepo->getPackages()); + foreach ($repos as $package) { + $output->writeln('plattform: ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' (' . $package->getVersion() . ')'); + } + + return; + } foreach ($installedRepo->getPackages() as $package) { - $output->writeln('installed: '.$package->getPrettyName().' '.$package->getPrettyVersion().' ('.$package->getName().' '.$package->getVersion().')'); + if ($localRepo->hasPackage($package)) { + $output->writeln('installed: ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' (' . $package->getVersion() . ')'); + } else { + $output->writeln('platform: ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' (' . $package->getName() . ' ' . $package->getVersion() . ')'); + } } foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { foreach ($repository->getPackages() as $package) { - $output->writeln('available: '.$package->getPrettyName().' '.$package->getPrettyVersion().' ('.$package->getName().' '.$package->getVersion().')'); + $output->writeln('available: ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ' (' . $package->getName() . ' ' . $package->getVersion() . ')'); } } } -} + +} \ No newline at end of file diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index a10d16901..19892fa72 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -85,7 +85,7 @@ EOT // creating requirements request $request = new Request($pool); if ($update) { - $output->writeln('> Updating dependencies.'); + $output->writeln('Updating dependencies.'); $listedPackages = array(); $installedPackages = $installedRepo->getPackages(); $links = $this->collectLinks($input, $composer->getPackage()); @@ -108,14 +108,14 @@ EOT $request->install($link->getTarget(), $link->getConstraint()); } } elseif ($composer->getLocker()->isLocked()) { - $output->writeln('> Found lockfile. Reading.'); + $output->writeln('Found lockfile. Reading.'); foreach ($composer->getLocker()->getLockedPackages() as $package) { $constraint = new VersionConstraint('=', $package->getVersion()); $request->install($package->getName(), $constraint); } } else { - $output->writeln('> Installing dependencies.'); + $output->writeln('Installing dependencies.'); $links = $this->collectLinks($input, $composer->getPackage()); @@ -170,17 +170,17 @@ EOT if (!$dryRun) { if ($update || !$composer->getLocker()->isLocked()) { $composer->getLocker()->lockPackages($localRepo->getPackages()); - $output->writeln('> Locked'); + $output->writeln('Locked'); } $localRepo->write(); - $output->writeln('> Generating autoload files'); + $output->writeln('Generating autoload files'); $generator = new AutoloadGenerator; $generator->dump($localRepo, $composer->getPackage(), $installationManager, $installationManager->getVendorPath().'/.composer'); } - $output->writeln('> Done'); + $output->writeln('Done'); } private function collectLinks(InputInterface $input, PackageInterface $package) diff --git a/src/Composer/Command/SearchCommand.php b/src/Composer/Command/SearchCommand.php new file mode 100644 index 000000000..8b8ecc00b --- /dev/null +++ b/src/Composer/Command/SearchCommand.php @@ -0,0 +1,63 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Command; + +use Composer\Repository\PlatformRepository; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * @author Robert Schönthal + */ +class SearchCommand extends Command +{ + protected function configure() + { + $this + ->setName('search') + ->setDescription('search for packages') + ->setDefinition(array( + new InputArgument('tokens', InputArgument::IS_ARRAY, 'tokens to search for'), + )) + ->setHelp(<<php composer.phar search symfony composer + +EOT + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $composer = $this->getComposer(); + + // create local repo, this contains all packages that are installed in the local project + $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + + foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { + foreach ($repository->getPackages() as $package) { + foreach ((array) $input->getArgument('tokens') as $token) { + if (false === strpos($package->getName(), $token)) { + continue; + } + + $state = $localRepo->hasPackage($package) ? 'installed' : $state = 'available'; + + $output->writeln($state . ': ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . ''); + } + } + } + } +} \ No newline at end of file diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index e3101b8c5..50ad96c6d 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -42,14 +42,14 @@ EOT $latest = trim(file_get_contents('http://getcomposer.org/version')); if (Composer::VERSION !== $latest) { - $output->writeln(sprintf("Updating to version %s.", $latest)); + $output->writeln(sprintf("Updating to version %s.", $latest)); $remoteFilename = 'http://getcomposer.org/composer.phar'; $localFilename = $_SERVER['argv'][0]; file_put_contents($localFilename, file_get_contents($remoteFilename)); } else { - $output->writeln("You are using the latest composer version."); + $output->writeln("You are using the latest composer version."); } } } diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index c78c9569c..df919dc80 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -162,6 +162,7 @@ class Application extends BaseApplication $this->add(new Command\InstallCommand()); $this->add(new Command\UpdateCommand()); $this->add(new Command\DebugPackagesCommand()); + $this->add(new Command\SearchCommand()); if ('phar:' === substr(__FILE__, 0, 5)) { $this->add(new Command\SelfUpdateCommand());