From 872e83bf2bece0d4734a78e79a9d0aaf4405f909 Mon Sep 17 00:00:00 2001 From: Hugo Peek Date: Sun, 17 Oct 2021 18:03:51 +0800 Subject: [PATCH 1/2] Properly compare multiple package versions --- src/Command/InstallPackageCommand.php | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Command/InstallPackageCommand.php b/src/Command/InstallPackageCommand.php index d86d440..3306524 100644 --- a/src/Command/InstallPackageCommand.php +++ b/src/Command/InstallPackageCommand.php @@ -356,7 +356,7 @@ private function download($packageName, $provider, $options = []) { 'location' => (string) $foundPkg->location, 'signature' => (string) $foundPkg->signature ); - $packageVersions[(string)$foundPkg->version] = [ + $packageVersions[(string)$foundPkg->signature] = [ 'name' => (string) $foundPkg->name, 'version' => (string) $foundPkg->version, 'release' => (string) $foundPkg->release, @@ -368,8 +368,25 @@ private function download($packageName, $provider, $options = []) { // If there are multiple versions of the same package, use the latest if (count($packageVersions) > 1) { - $packageLatest = max(array_keys($packageVersions)); - $packages[$packageName] = $packageVersions[$packageLatest]; + $i = 0; + $latest = ''; + + // Compare versions + foreach (array_keys($packageVersions) as $version) { + if ($i == 0) { + // First iteration + $latest = $version; + } else { + // Replace latest version with current one if it's higher + if (version_compare($version, $latest) == 1) { + $latest = $version; + } + } + $i++; + } + + // Use latest + $packages[$packageName] = $packageVersions[$latest]; } // If there's still no match, revisit the response and just grab all hits... From 52aca0572db8ed8dee953a0ba51fd0ac0e47345d Mon Sep 17 00:00:00 2001 From: Hugo Peek Date: Sun, 17 Oct 2021 22:18:50 +0800 Subject: [PATCH 2/2] Use integrated operator with version_compare --- src/Command/InstallPackageCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Command/InstallPackageCommand.php b/src/Command/InstallPackageCommand.php index 3306524..d0b67c0 100644 --- a/src/Command/InstallPackageCommand.php +++ b/src/Command/InstallPackageCommand.php @@ -378,7 +378,7 @@ private function download($packageName, $provider, $options = []) { $latest = $version; } else { // Replace latest version with current one if it's higher - if (version_compare($version, $latest) == 1) { + if (version_compare($version, $latest, '>=')) { $latest = $version; } }