/** * Search for packages. * * @param array $packages Indexed array of package names to search for * @param boolean $onlyname True for name only search, false for full text * * @throws PackageManagerException * * @return array List of matching packages */ public function execute($packages, $onlyname = true) { /** @var \Composer\Composer $composer */ $composer = $this->getComposer(); $io = $this->getIO(); $platformRepo = new PlatformRepository(); if ($composer) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository([$localRepo, $platformRepo]); $repos = new CompositeRepository(array_merge([$installedRepo], $composer->getRepositoryManager()->getRepositories())); } else { $defaultRepos = RepositoryFactory::defaultRepos($io); //No composer.json found in the current directory, showing packages from local repo $installedRepo = $platformRepo; $repos = new CompositeRepository(array_merge([$installedRepo], $defaultRepos)); } $flags = $onlyname ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; try { return $repos->search(implode(' ', $packages), $flags); } catch (\Exception $e) { $msg = sprintf('%s recieved an error from Composer: %s in %s::%s', __METHOD__, $e->getMessage(), $e->getFile(), $e->getLine()); $this->app['logger.system']->critical($msg, ['event' => 'exception', 'exception' => $e]); throw new PackageManagerException($e->getMessage(), $e->getCode(), $e); } }
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 { $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)); } if ($composer) { $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'search', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); } $onlyName = $input->getOption('only-name'); $flags = $onlyName ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; $results = $repos->search(implode(' ', $input->getArgument('tokens')), $flags); foreach ($results as $result) { $output->writeln($result['name'] . (isset($result['description']) ? ' ' . $result['description'] : '')); } }
/** * Search for packages. * * @param array $packages Indexed array of package names to search for * @param boolean $onlyname True for name only search, false for full text * * @throws PackageManagerException * * @return array List of matching packages */ public function execute($packages, $onlyname = true) { /** @var $composer \Composer\Composer */ $composer = $this->app['extend.manager']->getComposer(); $io = $this->app['extend.manager']->getIO(); $platformRepo = new PlatformRepository(); if ($composer) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); } else { $defaultRepos = Factory::createDefaultRepositories($io); //No composer.json found in the current directory, showing packages from local repo $installedRepo = $platformRepo; $repos = new CompositeRepository(array_merge(array($installedRepo), $defaultRepos)); } $flags = $onlyname ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; try { return $repos->search(implode(' ', $packages), $flags); } catch (\Exception $e) { $msg = __CLASS__ . '::' . __FUNCTION__ . ' recieved an error from Composer: ' . $e->getMessage() . ' in ' . $e->getFile() . '::' . $e->getLine(); $this->app['logger.system']->critical($msg, array('event' => 'exception', 'exception' => $e)); throw new PackageManagerException($e->getMessage(), $e->getCode(), $e); } }
/** * Search for packages. * * @param array $tokens * @param int $searchIn * * @return CompletePackageInterface[] */ protected function searchPackages(array $tokens, $searchIn) { $repositoryManager = $this->getRepositoryManager(); $platformRepo = new PlatformRepository(); $localRepository = $repositoryManager->getLocalRepository(); $installedRepository = new CompositeRepository(array($localRepository, $platformRepo)); $repositories = new CompositeRepository(array_merge(array($installedRepository), $repositoryManager->getRepositories())); $results = $repositories->search(implode(' ', $tokens), $searchIn); $contaoVersion = VERSION . (is_numeric(BUILD) ? '.' . BUILD : '-' . BUILD); $constraint = $this->createConstraint('=', $contaoVersion); $constraint->setPrettyString($contaoVersion); $packages = array(); foreach ($results as $result) { if (!isset($packages[$result['name']])) { /** @var PackageInterface[] $versions */ $versions = $repositories->findPackages($result['name']); /** @var PackageInterface|CompletePackageInterface $latestVersion */ $latestVersion = false; $packages[$result['name']] = $result; if (count($versions)) { $packages[$result['name']]['type'] = $versions[0]->getType(); $packages[$result['name']]['description'] = $versions[0] instanceof CompletePackageInterface ? $versions[0]->getDescription() : ''; $packages[$result['name']]['contao-compatible'] = null; foreach ($versions as $version) { $requires = $version->getRequires(); if (isset($requires['contao/core']) && $requires['contao/core'] instanceof Link) { /** @var Link $link */ $link = $requires['contao/core']; if ($link->getConstraint()->matches($constraint)) { $packages[$result['name']]['contao-compatible'] = true; if (!$latestVersion || $version->getReleaseDate() > $latestVersion->getReleaseDate()) { $latestVersion = $version; } } } } } if ($packages[$result['name']]['contao-compatible'] === null) { $packages[$result['name']]['contao-compatible'] = true; } if ($latestVersion) { $packages[$result['name']]['type'] = $latestVersion->getType(); if ($latestVersion instanceof CompletePackageInterface) { $packages[$result['name']]['description'] = $latestVersion->getDescription(); } } } } return $packages; }
protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); $io = $this->getIO(); if (!($composer = $this->getComposer(false))) { $composer = Factory::create($this->getIO(), array()); } $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'search', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $onlyName = $input->getOption('only-name'); $type = $input->getOption('type') ?: null; $flags = $onlyName ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; $results = $repos->search(implode(' ', $input->getArgument('tokens')), $flags, $type); foreach ($results as $result) { $io->write($result['name'] . (isset($result['description']) ? ' ' . $result['description'] : '')); } }