瀏覽代碼

Caching + all links update

Andrew Tch 13 年之前
父節點
當前提交
c659cf09de

+ 48 - 34
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -19,31 +19,44 @@ use Doctrine\ORM\EntityRepository;
  */
 class PackageRepository extends EntityRepository
 {
+
     public function packageExists($package)
     {
         return in_array($package, $this->getPackageNames());
     }
-    
+
     public function getPackageNames()
     {
-        //todo: caching
-        $names = array_map(function($value) {
-            return $value['name'];
-        }, $this->getEntityManager()
-                ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p")
-                ->getResult());
-        
+        //todo: move caching to some mature bundle, not apc
+        //use container to set caching key and ttl
+        if (extension_loaded('apc')) {
+            $names = apc_fetch('packagist_package_names');
+        }
+
+        if($names === false) {
+            $names = array_map(function($value)
+                {
+                    return $value['name'];
+                }, $this->getEntityManager()
+                        ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p")
+                        ->getResult());
+                
+            if(extension_loaded('apc')) {
+                apc_store('packagist_package_names', $names, 3600);
+            }
+        }
+
         return $names;
     }
-    
+
     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(new \DateTime('-1hour')));
+                ->from('Packagist\WebBundle\Entity\Package', 'p')
+                ->leftJoin('p.versions', 'v')
+                ->where('p.crawledAt IS NULL OR p.crawledAt < ?0')
+                ->setParameters(array(new \DateTime('-1hour')));
         return $qb->getQuery()->getResult();
     }
 
@@ -51,38 +64,38 @@ class PackageRepository extends EntityRepository
     {
         $qb = $this->getEntityManager()->createQueryBuilder();
         $qb->select('p, v, t')
-            ->from('Packagist\WebBundle\Entity\Package', 'p')
-            ->leftJoin('p.versions', 'v')
-            ->leftJoin('v.tags', 't')
-            ->where('p.indexedAt IS NULL OR p.indexedAt < ?0')
-            ->setParameters(array(new \DateTime('-1hour')));
+                ->from('Packagist\WebBundle\Entity\Package', 'p')
+                ->leftJoin('p.versions', 'v')
+                ->leftJoin('v.tags', 't')
+                ->where('p.indexedAt IS NULL OR p.indexedAt < ?0')
+                ->setParameters(array(new \DateTime('-1hour')));
         return $qb->getQuery()->getResult();
     }
 
     public function findOneByName($name)
     {
         $qb = $this->getBaseQueryBuilder()
-            ->where('p.name = ?0')
-            ->setParameters(array($name));
+                ->where('p.name = ?0')
+                ->setParameters(array($name));
         return $qb->getQuery()->getSingleResult();
     }
 
     public function findByTag($name)
     {
         return $this->getBaseQueryBuilder()
-            // eliminate maintainers & tags from the select, because of the groupBy
-            ->select('p, v')
-            ->where('t.name = ?0')
-            ->setParameters(array($name));
+                        // eliminate maintainers & tags from the select, because of the groupBy
+                        ->select('p, v')
+                        ->where('t.name = ?0')
+                        ->setParameters(array($name));
     }
 
     public function getQueryBuilderByMaintainer(User $user)
     {
         $qb = $this->getBaseQueryBuilder()
-            // eliminate maintainers & tags from the select, because of the groupBy
-            ->select('p, v')
-            ->where('m.id = ?0')
-            ->setParameters(array($user->getId()));
+                // eliminate maintainers & tags from the select, because of the groupBy
+                ->select('p, v')
+                ->where('m.id = ?0')
+                ->setParameters(array($user->getId()));
         return $qb;
     }
 
@@ -90,12 +103,13 @@ class PackageRepository extends EntityRepository
     {
         $qb = $this->getEntityManager()->createQueryBuilder();
         $qb->select('p, v, t, m')
-            ->from('Packagist\WebBundle\Entity\Package', 'p')
-            ->leftJoin('p.versions', 'v')
-            ->leftJoin('p.maintainers', 'm')
-            ->leftJoin('v.tags', 't')
-            ->orderBy('v.development', 'DESC')
-            ->addOrderBy('v.releasedAt', 'DESC');
+                ->from('Packagist\WebBundle\Entity\Package', 'p')
+                ->leftJoin('p.versions', 'v')
+                ->leftJoin('p.maintainers', 'm')
+                ->leftJoin('v.tags', 't')
+                ->orderBy('v.development', 'DESC')
+                ->addOrderBy('v.releasedAt', 'DESC');
         return $qb;
     }
+
 }

+ 6 - 7
src/Packagist/WebBundle/Resources/views/Web/viewPackage.html.twig

@@ -81,8 +81,7 @@
                                             {% if version.require|length %}
                                                 <ul>
                                                     {%- for req in version.require -%}
-                                                        <li>
-                                                            {{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}
@@ -94,7 +93,7 @@
                                             {% if version.recommend|length %}
                                                 <ul>
                                                     {%- for req in version.recommend -%}
-                                                        <li>{{ req.packageName }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}
@@ -106,7 +105,7 @@
                                             {% if version.suggest|length %}
                                                 <ul>
                                                     {%- for req in version.suggest -%}
-                                                        <li>{{ req.packageName }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}
@@ -118,7 +117,7 @@
                                             {% if version.provide|length %}
                                                 <ul>
                                                     {%- for req in version.provide -%}
-                                                        <li>{{ req.packageName }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}
@@ -130,7 +129,7 @@
                                             {% if version.conflict|length %}
                                                 <ul>
                                                     {%- for req in version.conflict -%}
-                                                        <li>{{ req.packageName }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }}: {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}
@@ -142,7 +141,7 @@
                                             {% if version.replace|length %}
                                                 <ul>
                                                     {%- for req in version.replace -%}
-                                                        <li>{{ req.packageName }}: {{ req.packageVersion }}</li>
+                                                        <li>{{ packagist.package_link(req.packageName) }} {{ req.packageVersion }}</li>
                                                     {%- endfor -%}
                                                 </ul>
                                             {% else %}