Browse Source

Handle abandoned flag set in metadata when updating master branch, fixes #1062

Jordi Boggiano 5 years ago
parent
commit
e165dd8817
2 changed files with 24 additions and 8 deletions
  1. 9 4
      composer.lock
  2. 15 4
      src/Packagist/WebBundle/Package/Updater.php

+ 9 - 4
composer.lock

@@ -329,12 +329,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "7e87b56324cc7e85217ff2422a8b858718f683bd"
+                "reference": "dbcf592ea22553d90cf27e81501fe279345473f6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/7e87b56324cc7e85217ff2422a8b858718f683bd",
-                "reference": "7e87b56324cc7e85217ff2422a8b858718f683bd",
+                "url": "https://api.github.com/repos/composer/composer/zipball/dbcf592ea22553d90cf27e81501fe279345473f6",
+                "reference": "dbcf592ea22553d90cf27e81501fe279345473f6",
                 "shasum": ""
             },
             "require": {
@@ -401,7 +401,12 @@
                 "dependency",
                 "package"
             ],
-            "time": "2020-01-13T14:58:56+00:00"
+            "support": {
+                "irc": "irc://irc.freenode.org/composer",
+                "issues": "https://github.com/composer/composer/issues",
+                "source": "https://github.com/composer/composer/tree/master"
+            },
+            "time": "2020-01-14T15:33:39+00:00"
         },
         {
             "name": "composer/semver",

+ 15 - 4
src/Packagist/WebBundle/Package/Updater.php

@@ -199,7 +199,7 @@ class Updater
             }
             $processedVersions[strtolower($version->getVersion())] = $version;
 
-            $result = $this->updateInformation($versionRepository, $package, $existingVersions, $version, $flags, $rootIdentifier);
+            $result = $this->updateInformation($io, $versionRepository, $package, $existingVersions, $version, $flags, $rootIdentifier);
             $lastUpdated = $result['updated'];
 
             if ($lastUpdated) {
@@ -258,7 +258,7 @@ class Updater
      *                    - version (normalized version from the composer package)
      *                    - object (Version instance if it was updated)
      */
-    private function updateInformation(VersionRepository $versionRepo, Package $package, array $existingVersions, PackageInterface $data, $flags, $rootIdentifier)
+    private function updateInformation(IOInterface $io, VersionRepository $versionRepo, Package $package, array $existingVersions, PackageInterface $data, $flags, $rootIdentifier)
     {
         $em = $this->doctrine->getManager();
         $version = new Version();
@@ -268,8 +268,12 @@ class Updater
         $existingVersion = $existingVersions[strtolower($normVersion)] ?? null;
         if ($existingVersion) {
             $source = $existingVersion['source'];
-            // update if the right flag is set, or the source reference has changed (re-tag or new commit on branch)
-            if ($source['reference'] !== $data->getSourceReference() || ($flags & self::UPDATE_EQUAL_REFS)) {
+            if (
+                // update if the source reference has changed (re-tag or new commit on branch)
+                $source['reference'] !== $data->getSourceReference()
+                // or if the right flag is set
+                || ($flags & self::UPDATE_EQUAL_REFS)
+            ) {
                 $version = $versionRepo->findOneById($existingVersion['id']);
             } elseif ($existingVersion['needs_author_migration']) {
                 $version = $versionRepo->findOneById($existingVersion['id']);
@@ -296,6 +300,13 @@ class Updater
         // update the package description only for the default branch
         if ($rootIdentifier === null || preg_replace('{dev-|(\.x)?-dev}', '', $version->getVersion()) === $rootIdentifier) {
             $package->setDescription($descr);
+            if ($data->isAbandoned() && !$package->isAbandoned()) {
+                $io->write('Marking package abandoned as per composer metadata from '.$version->getVersion());
+                $package->setAbandoned(true);
+                if ($data->getReplacementPackage()) {
+                    $package->setReplacementPackage($data->getReplacementPackage());
+                }
+            }
         }
 
         $version->setHomepage($data->getHomepage());