Beispiel #1
0
 /**
  * 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'] : ''));
     }
 }
Beispiel #3
0
 /**
  * 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;
 }
Beispiel #5
0
 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'] : ''));
     }
 }