From ff74d0e6868d1192f20ec9a9f1302b8514ff301b Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 27 Oct 2020 20:50:26 +0100 Subject: [PATCH] Fix lock file generation with dev-master aliases to be compatible with Composer 1, fixes #9337 --- src/Composer/Package/Locker.php | 11 ++++++++++- .../Test/Fixtures/installer/alias-with-reference.test | 2 +- .../update-allow-list-with-dependencies-alias.test | 6 +++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Composer/Package/Locker.php b/src/Composer/Package/Locker.php index 2f669de85..a4eef3efa 100644 --- a/src/Composer/Package/Locker.php +++ b/src/Composer/Package/Locker.php @@ -19,6 +19,7 @@ use Composer\Repository\RepositoryManager; use Composer\Util\ProcessExecutor; use Composer\Package\Dumper\ArrayDumper; use Composer\Package\Loader\ArrayLoader; +use Composer\Package\Version\VersionParser; use Composer\Plugin\PluginInterface; use Composer\Util\Git as GitUtil; use Composer\IO\IOInterface; @@ -309,6 +310,15 @@ class Locker */ public function setLockData(array $packages, $devPackages, array $platformReqs, $platformDevReqs, array $aliases, $minimumStability, array $stabilityFlags, $preferStable, $preferLowest, array $platformOverrides, $write = true) { + // keep old default branch names normalized to DEFAULT_BRANCH_ALIAS for BC as that is how Composer 1 outputs the lock file + // when loading the lock file the version is anyway ignored in Composer 2, so it has no adverse effect + $aliases = array_map(function ($alias) { + if (in_array($alias['version'], array('dev-master', 'dev-trunk', 'dev-default'), true)) { + $alias['version'] = VersionParser::DEFAULT_BRANCH_ALIAS; + } + return $alias; + }, $aliases); + $lock = array( '_readme' => array('This file locks the dependencies of your project to a known state', 'Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies', @@ -343,7 +353,6 @@ class Locker if (!$isLocked || $lock !== $this->getLockData()) { if ($write) { $this->lockFile->write($lock); -// $this->lockDataCache = JsonFile::parseJson(JsonFile::encode($lock, 448 & JsonFile::JSON_PRETTY_PRINT)); $this->lockDataCache = null; $this->virtualFileWritten = false; } else { diff --git a/tests/Composer/Test/Fixtures/installer/alias-with-reference.test b/tests/Composer/Test/Fixtures/installer/alias-with-reference.test index c37b6e5f3..f7e51e5f9 100644 --- a/tests/Composer/Test/Fixtures/installer/alias-with-reference.test +++ b/tests/Composer/Test/Fixtures/installer/alias-with-reference.test @@ -45,7 +45,7 @@ update "packages-dev": [], "aliases": [{ "package": "a/aliased", - "version": "dev-master", + "version": "9999999-dev", "alias": "1.0.0", "alias_normalized": "1.0.0.0" }], diff --git a/tests/Composer/Test/Fixtures/installer/update-allow-list-with-dependencies-alias.test b/tests/Composer/Test/Fixtures/installer/update-allow-list-with-dependencies-alias.test index 193a5d85d..5e5f04777 100644 --- a/tests/Composer/Test/Fixtures/installer/update-allow-list-with-dependencies-alias.test +++ b/tests/Composer/Test/Fixtures/installer/update-allow-list-with-dependencies-alias.test @@ -44,7 +44,7 @@ Verify that a partial update with deps correctly keeps track of all aliases. { "alias": "1.1.0", "alias_normalized": "1.1.0.0", - "version": "dev-master", + "version": "9999999-dev", "package": "current/dep" } ], @@ -70,13 +70,13 @@ update new/pkg --with-all-dependencies { "alias": "1.1.0", "alias_normalized": "1.1.0.0", - "version": "dev-master", + "version": "9999999-dev", "package": "current/dep" }, { "alias": "1.1.2", "alias_normalized": "1.1.2.0", - "version": "dev-master", + "version": "9999999-dev", "package": "current/dep2" } ],