From d8aa3f05e5c0754241fcdcc19da35fa1a6b2c852 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Tue, 11 Jun 2024 07:04:01 -0700 Subject: [PATCH] [ticket/17336] Correctly handle aliased packages PHPBB-17336 Signed-off-by: Matt Friedman --- phpBB/phpbb/composer/installer.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/phpBB/phpbb/composer/installer.php b/phpBB/phpbb/composer/installer.php index 1d3e6c8484..68b7f2e520 100644 --- a/phpBB/phpbb/composer/installer.php +++ b/phpBB/phpbb/composer/installer.php @@ -22,7 +22,9 @@ use Composer\IO\NullIO; use Composer\Json\JsonFile; use Composer\Json\JsonValidationException; use Composer\Package\BasePackage; +use Composer\Package\CompleteAliasPackage; use Composer\Package\CompletePackage; +use Composer\Package\Version\VersionParser; use Composer\PartialComposer; use Composer\Repository\ComposerRepository; use Composer\Semver\Constraint\ConstraintInterface; @@ -390,23 +392,25 @@ class installer foreach ($compatible_packages as $name => $versions) { // Determine the highest version of the package - /** @var CompletePackage $highest_version */ + /** @var CompletePackage|CompleteAliasPackage $highest_version */ $highest_version = null; - /** @var CompletePackage $version */ + /** @var CompletePackage|CompleteAliasPackage $version */ foreach ($versions as $version) { - if (strpos($version->getVersion(), '9999999') === 0) - { - continue; - } - if (!$highest_version || version_compare($version->getVersion(), $highest_version->getVersion(), '>')) { $highest_version = $version; } } + // If highest version is DEFAULT_BRANCH_ALIAS (9999999-dev), then it's a non-numeric dev branch handled by + // an Alias, so we need to get the actual package being aliased in order to show the true non-numeric version. + if ($highest_version->getVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) + { + $highest_version = $highest_version->getAliasOf(); + } + // Generates the entry $available[$name] = []; $available[$name]['name'] = $highest_version->getPrettyName();