public function testLoadVersions() { $expected = array('0.6.0' => true, '1.0.0' => true, '1.0.x-dev' => true, '1.1.x-dev' => true, 'dev-feature-b' => true, 'dev-feature-a' => true, 'dev-master' => true); $repo = new VcsRepository(array('url' => self::$gitRepo, 'type' => 'vcs'), new NullIO()); $packages = $repo->getPackages(); $dumper = new ArrayDumper(); foreach ($packages as $package) { if (isset($expected[$package->getPrettyVersion()])) { unset($expected[$package->getPrettyVersion()]); } else { $this->fail('Unexpected version ' . $package->getPrettyVersion() . ' in ' . json_encode($dumper->dump($package))); } } $this->assertEmpty($expected, 'Missing versions: ' . implode(', ', array_keys($expected))); }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $verbose = $input->getOption('verbose'); $force = $input->getOption('force'); $package = $input->getArgument('package'); $doctrine = $this->getContainer()->get('doctrine'); $logger = $this->getContainer()->get('logger'); $this->versionParser = new VersionParser(); if ($package) { $packages = array($doctrine->getRepository('PackagistWebBundle:Package')->findOneByName($package)); } elseif ($force) { $packages = $doctrine->getRepository('PackagistWebBundle:Package')->findAll(); } else { $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages(); } $start = new \DateTime(); foreach ($packages as $package) { if ($verbose) { $output->writeln('Importing ' . $package->getRepository()); } try { $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO()); if ($verbose) { $repository->setDebug(true); } $versions = $repository->getPackages(); usort($versions, function ($a, $b) { return version_compare($a->getVersion(), $b->getVersion()); }); // clear existing versions to force a clean reloading if --force is enabled if ($force) { $versionRepo = $doctrine->getRepository('PackagistWebBundle:Version'); foreach ($package->getVersions() as $version) { $versionRepo->remove($version); } $doctrine->getEntityManager()->flush(); $doctrine->getEntityManager()->refresh($package); } foreach ($versions as $version) { if ($verbose) { $output->writeln('Storing ' . $version->getPrettyVersion() . ' (' . $version->getVersion() . ')'); } $this->updateInformation($output, $doctrine, $package, $version); $doctrine->getEntityManager()->flush(); } // remove outdated -dev versions foreach ($package->getVersions() as $version) { if ($version->getDevelopment() && $version->getUpdatedAt() < $start) { if ($verbose) { $output->writeln('Deleting stale version: ' . $version->getVersion()); } $doctrine->getRepository('PackagistWebBundle:Version')->remove($version); } } $package->setUpdatedAt(new \DateTime()); $package->setCrawledAt(new \DateTime()); $doctrine->getEntityManager()->flush(); } catch (\Exception $e) { $output->writeln('<error>Exception: ' . $e->getMessage() . ', skipping package ' . $package->getName() . '.</error>'); } } }