Jordi Boggiano 14 жил өмнө
parent
commit
249fcfc69e

+ 9 - 18
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -50,18 +50,14 @@ EOF
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $em = $this->getContainer()->get('doctrine')->getEntityManager();
+        $doctrine = $this->getContainer()->get('doctrine');
+
         $logger = $this->getContainer()->get('logger');
         $provider = $this->getContainer()->get('repository_provider');
 
-        $qb = $em->createQueryBuilder();
-        $qb->select('p, v')
-            ->from('Packagist\WebBundle\Entity\Package', 'p')
-            ->leftJoin('p.versions', 'v')
-            ->where('p.crawledAt IS NULL OR p.crawledAt < ?0')
-            ->setParameters(array(date('Y-m-d H:i:s', time() - 3600)));
+        $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages();
 
-        foreach ($qb->getQuery()->getResult() as $package) {
+        foreach ($packages as $package) {
             $repository = $provider->getRepository($package->getRepository());
 
             if (!$repository) {
@@ -85,7 +81,7 @@ EOF
 
                 $package->setUpdatedAt(new \DateTime);
                 $package->setCrawledAt(new \DateTime);
-                $em->flush();
+                $doctrine->getEntityManager()->flush();
             } catch (\Exception $e) {
                 $output->writeln('<error>Exception: '.$e->getMessage().', skipping package.</error>');
                 continue;
@@ -93,9 +89,10 @@ EOF
         }
     }
 
-    protected function fetchInformation(OutputInterface $output, $em, $package, $repository, $identifier)
+    protected function fetchInformation(OutputInterface $output, $doctrine, $package, $repository, $identifier)
     {
         $data = $repository->getComposerInformation($identifier);
+        $em = $doctrine->getEntityManager();
 
         // check if we have that version yet
         foreach ($package->getVersions() as $version) {
@@ -105,7 +102,7 @@ EOF
         }
 
         if ($data['name'] !== $package->getName()) {
-            $output->writeln('<error>Package name seems to have changed for '.$repository->getUrl().'@'.$identifier.', skipping tag.</error>');
+            $output->writeln('<error>Package name seems to have changed for '.$repository->getUrl().'@'.$identifier.', skipping.</error>');
             return;
         }
 
@@ -139,13 +136,7 @@ EOF
                 }
 
                 if (isset($authorData['email'])) {
-                    $qb = $em->createQueryBuilder();
-                    $qb->select('a')
-                        ->from('Packagist\WebBundle\Entity\Author', 'a')
-                        ->where('a.email = ?0')
-                        ->setParameters(array($authorData['email']))
-                        ->setMaxResults(1);
-                    $author = $qb->getQuery()->getOneOrNullResult();
+                    $author = $doctrine->getRepository('PackagistWebBundle:Author')->findOneByEmail($authorData['email']);
                 }
 
                 if (!$author) {

+ 1 - 1
src/Packagist/WebBundle/Entity/Package.php

@@ -18,7 +18,7 @@ use Symfony\Component\Validator\ExecutionContext;
 use Doctrine\Common\Collections\ArrayCollection;
 
 /**
- * @ORM\Entity
+ * @ORM\Entity(repositoryClass="Packagist\WebBundle\Entity\PackageRepository")
  * @ORM\Table(
  *     name="package",
  *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}

+ 38 - 0
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Packagist.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *     Nils Adermann <naderman@naderman.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Packagist\WebBundle\Entity;
+
+use Doctrine\ORM\EntityRepository;
+
+/**
+ * @ORM\Entity
+ * @ORM\Table(
+ *     name="package",
+ *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}
+ * )
+ * @Assert\Callback(methods={"isRepositoryValid", "isPackageUnique"})
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class PackageRepository extends EntityRepository
+{
+    public function getStalePackages()
+    {
+        $qb = $this->getEntityManager()->createQueryBuilder();
+        $qb->select('p, v')
+            ->from('Packagist\WebBundle\Entity\Package', 'p')
+            ->leftJoin('p.versions', 'v')
+            ->where('p.crawledAt IS NULL OR p.crawledAt < ?0')
+            ->setParameters(array(date('Y-m-d H:i:s', time() - 3600)));
+        return $qb->getQuery()->getResult();
+    }
+}