瀏覽代碼

Restore skipping of tagged versions unless their tag reference got updated

Jordi Boggiano 11 年之前
父節點
當前提交
f18e47d16a

+ 2 - 0
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -64,8 +64,10 @@ class UpdatePackagesCommand extends ContainerAwareCommand
 
         if ($package) {
             $packages = array(array('id' => $doctrine->getRepository('PackagistWebBundle:Package')->findOneByName($package)->getId()));
+            $flags = Updater::UPDATE_EQUAL_REFS;
         } elseif ($force) {
             $packages = $doctrine->getManager()->getConnection()->fetchAll('SELECT id FROM package ORDER BY id ASC');
+            $flags = Updater::UPDATE_EQUAL_REFS;
         } else {
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getStalePackages();
         }

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -649,7 +649,7 @@ class WebController extends Controller
                 $repository->setLoader($loader);
 
                 try {
-                    $updater->update($package, $repository);
+                    $updater->update($package, $repository, Updater::UPDATE_EQUAL_REFS);
                 } catch (\Exception $e) {
                     return new Response(json_encode(array(
                         'status' => 'error',

+ 12 - 2
src/Packagist/WebBundle/Package/Updater.php

@@ -29,6 +29,7 @@ use Symfony\Bridge\Doctrine\RegistryInterface;
  */
 class Updater
 {
+    const UPDATE_EQUAL_REFS = 1;
     const DELETE_BEFORE = 2;
 
     /**
@@ -164,8 +165,17 @@ class Updater
         // check if we have that version yet
         foreach ($package->getVersions() as $existingVersion) {
             if (strtolower($existingVersion->getNormalizedVersion()) === strtolower($normVersion)) {
-                $version = $existingVersion;
-                break;
+                $source = $existingVersion->getSource();
+                // update if the right flag is set, or it's a dev version, or the source reference has changed in a tagged release (re-tag)
+                if ($existingVersion->getDevelopment() || $source['reference'] !== $data->getSourceReference() || ($flags & self::UPDATE_EQUAL_REFS)) {
+                    $version = $existingVersion;
+                    break;
+                }
+
+                // mark it updated to avoid it being pruned
+                $existingVersion->setUpdatedAt(new \DateTime);
+
+                return;
             }
         }