Эх сурвалжийг харах

Delete outdated dev versions after updating a package

Jordi Boggiano 13 жил өмнө
parent
commit
4c8834e13b

+ 11 - 1
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -79,6 +79,8 @@ EOF
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages();
         }
 
+        $start = new \DateTime();
+
         foreach ($packages as $package) {
             $repository = $provider->getRepository($package->getRepository());
 
@@ -142,7 +144,15 @@ EOF
                     }
                 }
 
-                // TODO -dev versions that were not updated should be deleted
+                // 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);

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

@@ -16,7 +16,7 @@ use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
- * @ORM\Entity
+ * @ORM\Entity(repositoryClass="Packagist\WebBundle\Entity\VersionRepository")
  * @ORM\Table(
  *     name="package_version",
  *     uniqueConstraints={@ORM\UniqueConstraint(name="pkg_ver_idx",columns={"package_id","version"})}

+ 55 - 0
src/Packagist/WebBundle/Entity/VersionRepository.php

@@ -0,0 +1,55 @@
+<?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;
+
+/**
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class VersionRepository extends EntityRepository
+{
+    protected $supportedLinkTypes = array(
+        'require',
+        'conflict',
+        'provide',
+        'replace',
+        'recommend',
+        'suggest',
+    );
+
+    public function remove(Version $version)
+    {
+        $em = $this->getEntityManager();
+        $version->getPackage()->getVersions()->removeElement($version);
+
+        foreach ($version->getAuthors() as $author) {
+            $author->getVersions()->removeElement($version);
+        }
+        $version->getAuthors()->clear();
+
+        foreach ($version->getTags() as $tag) {
+            $tag->getVersions()->removeElement($version);
+        }
+        $version->getTags()->clear();
+
+        foreach ($this->supportedLinkTypes as $linkType) {
+            foreach ($version->{'get'.$linkType}() as $link) {
+                $em->remove($link);
+            }
+            $version->{'get'.$linkType}()->clear();
+        }
+
+        $em->remove($version);
+    }
+}