public function testFindPackages()
 {
     $arrayRepoOne = new ArrayRepository();
     $arrayRepoOne->addPackage($this->getPackage('foo', '1'));
     $arrayRepoOne->addPackage($this->getPackage('foo', '2'));
     $arrayRepoOne->addPackage($this->getPackage('bat', '1'));
     $arrayRepoTwo = new ArrayRepository();
     $arrayRepoTwo->addPackage($this->getPackage('bar', '1'));
     $arrayRepoTwo->addPackage($this->getPackage('bar', '2'));
     $arrayRepoTwo->addPackage($this->getPackage('foo', '3'));
     $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo));
     $bats = $repo->findPackages('bat');
     $this->assertCount(1, $bats, "Should find one instance of 'bats' (defined in just one repository)");
     $this->assertEquals('bat', $bats[0]->getName(), "Should find packages named 'bat'");
     $bars = $repo->findPackages('bar');
     $this->assertCount(2, $bars, "Should find two instances of 'bar' (both defined in the same repository)");
     $this->assertEquals('bar', $bars[0]->getName(), "Should find packages named 'bar'");
     $foos = $repo->findPackages('foo');
     $this->assertCount(3, $foos, "Should find three instances of 'foo' (two defined in one repository, the third in the other)");
     $this->assertEquals('foo', $foos[0]->getName(), "Should find packages named 'foo'");
 }
 /**
  * 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;
 }
Пример #3
0
 protected function selectPackage(IOInterface $io, $packageName, $version = null)
 {
     $io->writeError('<info>Searching for the specified package.</info>');
     if ($composer = $this->getComposer(false)) {
         $localRepo = $composer->getRepositoryManager()->getLocalRepository();
         $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories()));
     } else {
         $defaultRepos = Factory::createDefaultRepositories($this->getIO());
         $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos)));
         $repo = new CompositeRepository($defaultRepos);
     }
     $packages = $repo->findPackages($packageName, $version);
     if (count($packages) > 1) {
         $package = reset($packages);
         $io->writeError('<info>Found multiple matches, selected ' . $package->getPrettyString() . '.</info>');
         $io->writeError('Alternatives were ' . implode(', ', array_map(function ($p) {
             return $p->getPrettyString();
         }, $packages)) . '.');
         $io->writeError('<comment>Please use a more specific constraint to pick a different package.</comment>');
     } elseif ($packages) {
         $package = reset($packages);
         $io->writeError('<info>Found an exact match ' . $package->getPrettyString() . '.</info>');
     } else {
         $io->writeError('<error>Could not find a package matching ' . $packageName . '.</error>');
         return false;
     }
     return $package;
 }
Пример #4
0
 /**
  * Returns a package tag list.
  *
  * @param CompletePackageInterface $package
  *
  * @return array
  */
 public function getPackageTags(CompletePackageInterface $package)
 {
     $ds = DIRECTORY_SEPARATOR;
     putenv("COMPOSER_HOME={$this->vendorDir}{$ds}composer");
     $repos = Factory::createDefaultRepositories(new NullIO());
     $compositeRepo = new CompositeRepository($repos);
     $pkgs = $compositeRepo->findPackages($package->getPrettyName());
     $tags = array();
     foreach ($pkgs as $pkg) {
         $tags[] = $pkg->getPrettyVersion();
     }
     return $tags;
 }