From a5feee5594a4e5f1ec498cb81d4eee5bad976d47 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Mon, 10 Feb 2025 16:47:22 +0100
Subject: better handling of package with version in name

---
 class/PackagistClient.php |  6 ++++--
 class/Parser.php          | 12 ++++++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/class/PackagistClient.php b/class/PackagistClient.php
index 2120d36..5ea8429 100644
--- a/class/PackagistClient.php
+++ b/class/PackagistClient.php
@@ -68,10 +68,9 @@ class PackagistClient
         return ($rep ? json_decode($rep, true) : false);
     }
 
-    function getPackage($name)
+    function getPackage($name, $crt=0, $max=0)
     {
         $unstable = array('alpha', 'beta', 'rc');
-
         $ret = false;
         $pkgs = $this->getPackageData($name);
         if ($pkgs) {
@@ -83,6 +82,9 @@ class PackagistClient
             );
             foreach ($pkgs['package']['versions'] as $notused => $pkg) {
                 $pkver = $pkg['version'];
+                if ($pkver < $crt || $pkver > $max) {
+                    continue;
+                }
                 if (preg_match('/^v[0-9]/', $pkver)) {
                     $pkver = substr($pkver, 1);
                 }
diff --git a/class/Parser.php b/class/Parser.php
index ca00ac8..bb5306f 100644
--- a/class/Parser.php
+++ b/class/Parser.php
@@ -516,12 +516,20 @@ class Parser
         self::log("Packagist search releases");
         $pk = new PackagistClient();
 
-        $nb = $uptable->delete(array('type'=>'composer'));
+        $nb = $uptable->delete(['type'=>'composer']);
         self::log("Delete $nb packages");
 
         $tot = 0;
         foreach($pktable->request(array('ORDER'=>'rpmname')) as $rec) {
-            if ($rep = $pk->getPackage($rec['pkgname'])) {
+            if (preg_match('/[0-9]+$/', $rec['rpmname'], $reg)) {
+                // This already a versionned name
+                $crt = intval($reg[0]);
+                $max = $crt+1;
+            } else {
+                $crt = 0;
+                $max = 99999;
+            }
+            if ($rep = $pk->getPackage($rec['pkgname'], $crt, $max)) {
                 $v = explode('/', $rec['pkgname']);
                 switch(count($v)) {
                     case 3:
-- 
cgit