protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); if ($composer = $this->getComposer(false)) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } else { $output->writeln('No composer.json found in the current directory, showing packages from packagist.org'); $installedRepo = $platformRepo; $repos = new CompositeRepository(array($installedRepo, new ComposerRepository(array('url' => 'http://packagist.org')))); } $tokens = array_map('strtolower', $input->getArgument('tokens')); foreach ($repos->getPackages() as $package) { foreach ($tokens as $token) { if (false === ($pos = strpos($package->getName(), $token))) { continue; } if ($platformRepo->hasPackage($package)) { $type = '<info>platform: </info> '; } elseif ($installedRepo->hasPackage($package)) { $type = '<info>installed:</info> '; } else { $type = '<comment>available:</comment> '; } $name = substr($package->getPrettyName(), 0, $pos) . '<highlight>' . substr($package->getPrettyName(), $pos, strlen($token)) . '</highlight>' . substr($package->getPrettyName(), $pos + strlen($token)); $output->writeln($type . ': ' . $name . ' <comment>' . $package->getPrettyVersion() . '</comment>'); continue 2; } } }
protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); if ($input->getOption('platform')) { $repos = $installedRepo = $platformRepo; } elseif ($input->getOption('installed')) { $composer = $this->getComposer(); $repos = $installedRepo = $composer->getRepositoryManager()->getLocalRepository(); } elseif ($composer = $this->getComposer(false)) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } else { $output->writeln('No composer.json found in the current directory, showing packages from packagist.org'); $installedRepo = $platformRepo; $packagist = new ComposerRepository(array('url' => 'http://packagist.org'), $this->getIO()); $repos = new CompositeRepository(array($installedRepo, $packagist)); } // show single package or single version if ($input->getArgument('package')) { $package = $this->getPackage($input, $output, $installedRepo, $repos); if (!$package) { throw new \InvalidArgumentException('Package ' . $input->getArgument('package') . ' not found'); } $this->printMeta($input, $output, $package, $installedRepo, $repos); $this->printLinks($input, $output, $package, 'requires'); $this->printLinks($input, $output, $package, 'recommends'); $this->printLinks($input, $output, $package, 'replaces'); return; } // list packages $packages = array(); foreach ($repos->getPackages() as $package) { if ($platformRepo->hasPackage($package)) { $type = '<info>platform</info>:'; } elseif ($installedRepo->hasPackage($package)) { $type = '<info>installed</info>:'; } else { $type = '<comment>available</comment>:'; } if (isset($packages[$type][$package->getName()]) && version_compare($packages[$type][$package->getName()]->getVersion(), $package->getVersion(), '>=')) { continue; } $packages[$type][$package->getName()] = $package; } foreach (array('<info>platform</info>:', '<comment>available</comment>:', '<info>installed</info>:') as $type) { if (isset($packages[$type])) { $output->writeln($type); ksort($packages[$type]); foreach ($packages[$type] as $package) { $output->writeln(' ' . $package->getPrettyName() . ' <comment>:</comment> ' . strtok($package->getDescription(), "\r\n")); } $output->writeln(''); } } }
protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); if ($input->getOption('platform')) { $repos = $installedRepo = $platformRepo; } elseif ($input->getOption('installed')) { $composer = $this->getComposer(); $repos = $installedRepo = $composer->getRepositoryManager()->getLocalRepository(); } elseif ($composer = $this->getComposer(false)) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } else { $output->writeln('No composer.json found in the current directory, showing packages from packagist.org'); $installedRepo = $platformRepo; $repos = new CompositeRepository(array($installedRepo, new ComposerRepository(array('url' => 'http://packagist.org')))); } // show single package or single version if ($input->getArgument('package')) { $package = $this->getPackage($input, $output, $installedRepo, $repos); if (!$package) { throw new \InvalidArgumentException('Package ' . $input->getArgument('package') . ' not found'); } $this->printMeta($input, $output, $package, $installedRepo, $repos); $this->printLinks($input, $output, $package, 'requires'); $this->printLinks($input, $output, $package, 'recommends'); $this->printLinks($input, $output, $package, 'replaces'); return; } // list packages foreach ($repos->getPackages() as $package) { if ($platformRepo->hasPackage($package)) { $type = '<info>platform: </info> '; } elseif ($installedRepo->hasPackage($package)) { $type = '<info>installed:</info> '; } else { $type = '<comment>available:</comment> '; } $output->writeln($type . ' ' . $package->getPrettyName() . ' ' . $package->getPrettyVersion() . '<comment> (' . $package->getVersion() . ')</comment>'); } }
protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); $getRepositories = function (Composer $composer, $dev) { $manager = $composer->getRepositoryManager(); $repos = new CompositeRepository(array($manager->getLocalRepository())); if ($dev) { $repos->addRepository($manager->getLocalDevRepository()); } return $repos; }; if ($input->getOption('self')) { $package = $this->getComposer(false)->getPackage(); $repos = $installedRepo = new ArrayRepository(array($package)); } elseif ($input->getOption('platform')) { $repos = $installedRepo = $platformRepo; } elseif ($input->getOption('installed')) { $repos = $installedRepo = $getRepositories($this->getComposer(), $input->getOption('dev')); } elseif ($composer = $this->getComposer(false)) { $localRepo = $getRepositories($composer, $input->getOption('dev')); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } else { $defaultRepos = Factory::createDefaultRepositories($this->getIO()); $output->writeln('No composer.json found in the current directory, showing packages from ' . implode(', ', array_keys($defaultRepos))); $installedRepo = $platformRepo; $repos = new CompositeRepository(array_merge(array($installedRepo), $defaultRepos)); } // show single package or single version if ($input->getArgument('package') || !empty($package)) { $versions = array(); if (empty($package)) { list($package, $versions) = $this->getPackage($installedRepo, $repos, $input->getArgument('package'), $input->getArgument('version')); if (!$package) { throw new \InvalidArgumentException('Package ' . $input->getArgument('package') . ' not found'); } } else { $versions = array($package->getPrettyVersion() => $package->getVersion()); } $this->printMeta($input, $output, $package, $versions, $installedRepo, $repos); $this->printLinks($input, $output, $package, 'requires'); $this->printLinks($input, $output, $package, 'devRequires', 'requires (dev)'); if ($package->getSuggests()) { $output->writeln("\n<info>suggests</info>"); foreach ($package->getSuggests() as $suggested => $reason) { $output->writeln($suggested . ' <comment>' . $reason . '</comment>'); } } $this->printLinks($input, $output, $package, 'provides'); $this->printLinks($input, $output, $package, 'conflicts'); $this->printLinks($input, $output, $package, 'replaces'); return; } // list packages $packages = array(); $repos->filterPackages(function ($package) use(&$packages, $platformRepo, $installedRepo) { if ($platformRepo->hasPackage($package)) { $type = '<info>platform</info>:'; } elseif ($installedRepo->hasPackage($package)) { $type = '<info>installed</info>:'; } else { $type = '<comment>available</comment>:'; } if (!isset($packages[$type][$package->getName()]) || version_compare($packages[$type][$package->getName()]->getVersion(), $package->getVersion(), '<')) { $packages[$type][$package->getName()] = $package; } }, 'Composer\\Package\\CompletePackage'); foreach (array('<info>platform</info>:' => true, '<comment>available</comment>:' => false, '<info>installed</info>:' => true) as $type => $showVersion) { if (isset($packages[$type])) { $output->writeln($type); ksort($packages[$type]); foreach ($packages[$type] as $package) { $output->writeln(' ' . $package->getPrettyName() . ' ' . ($showVersion ? '[' . $package->getPrettyVersion() . ']' : '') . ' <comment>:</comment> ' . strtok($package->getDescription(), "\r\n")); } $output->writeln(''); } } }