diff options
-rw-r--r-- | class/PackagistClient.php | 11 | ||||
-rw-r--r-- | class/Parser.php | 70 | ||||
-rw-r--r-- | refresh.php | 2 | ||||
-rw-r--r-- | rpm.php | 26 | ||||
-rw-r--r-- | smarty/templates/rpmphp/zoom.tpl | 2 | ||||
-rw-r--r-- | zoom.php | 2 |
6 files changed, 72 insertions, 41 deletions
diff --git a/class/PackagistClient.php b/class/PackagistClient.php index 2fbb522..023ab1c 100644 --- a/class/PackagistClient.php +++ b/class/PackagistClient.php @@ -41,7 +41,7 @@ require_once 'Cache/Lite.php'; class PackagistClient { - const URL = 'https://packagist.org/'; + const URL = 'https://repo.packagist.org/'; protected $cache; function __construct () @@ -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) { @@ -81,7 +80,11 @@ class PackagistClient 'unstable' => NULL, 'state' => NULL, ); - foreach ($pkgs['package']['versions'] as $pkver => $pkg) { + 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 124b36e..bb5306f 100644 --- a/class/Parser.php +++ b/class/Parser.php @@ -186,23 +186,40 @@ class Parser } } if (!$TimRemote) { - self::log("Can't read $UrlRemote"); + self::log("Can't read " . $row['url']); } else if ($TimRemote > $row['stamp']) { self::log("Loading $UrlRemote"); - $fic=gzopen($UrlRemote, "r"); - if ($fic) { - $txt=""; - while ($buf=gzread($fic, 8196)) { - $txt .= $buf; + $txt = file_get_contents($UrlRemote); + if (!$txt) { + self::log("ERROR : can't read $UrlRemote"); + } else if (str_ends_with($UrlRemote, '.xml')) { + // OK + } else if (str_ends_with($UrlRemote, '.xz')) { + if (function_exists('xzdecode')) { + $txt = xzdecode($txt); + } else { + self::log("ERROR : missing xz php extension"); + return NULL; } - self::log("Read " . strlen($txt) . " bytes"); - gzclose($fic); - + } else if (str_ends_with($UrlRemote, '.zst')) { + if (function_exists('zstd_uncompress')) { + $txt = zstd_uncompress($txt); + } else { + self::log("ERROR : missing zstd php extension"); + return NULL; + } + } else if (str_ends_with($UrlRemote, '.gz')) { + $txt = gzdecode($txt); + } else { + self::log("ERROR : unkown compression"); + return NULL; + } + if ($txt) { $primary = simplexml_load_string($txt); if ($primary) { - self::log("Read " . $primary->attributes() . " packages"); + self::log("Read " . $primary->attributes() . " packages from primary"); $rpmrepo->update($row['id'], array('stamp' =>$TimRemote)); return $primary; @@ -210,7 +227,7 @@ class Parser self::log("ERROR : can't parse $UrlRemote"); } } else { - self::log("ERROR : can't read $UrlRemote"); + self::log("ERROR : can't uncompress $UrlRemote"); } } else { self::log("no update needed : $TimRemote / " . $row['stamp']); @@ -318,16 +335,21 @@ class Parser // Parse the provides foreach ($fmt as $fmt2) { $prov = $fmt2->attributes()['name']; - if (preg_match('/^php-composer\((.*)\)$/', $prov, $reg)) { - list($vend, $proj) = explode('/', $reg[1], 2); + if (preg_match('/^php-(composer|pie)\((.*)\)$/', $prov, $reg)) { + $type = $reg[1]; + $name = $reg[2]; + if (!strpos($name, '/')) { + continue; + } + list($vend, $proj) = explode('/', $name, 2); if ($vend == 'zendframework') { if (!$composer) { // only if empty to keep laminas - $composer = $reg[1]; + $composer = $name; } } else if (substr($reg[1], 0, 4) != 'ext-' - && substr($reg[1], -15) != '-implementation' + && substr($name, -15) != '-implementation' && !in_array($reg[1], $excl)) { - $composer = $reg[1]; + $composer = $name; } } } @@ -338,7 +360,7 @@ class Parser } } } - self::log("Read $tot packages"); + self::log("Read $tot packages for provides"); } return $tot; } @@ -494,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: @@ -747,4 +777,4 @@ class Parser } } -?>
\ No newline at end of file +?> diff --git a/refresh.php b/refresh.php index 7fb4810..90ba2a1 100644 --- a/refresh.php +++ b/refresh.php @@ -119,7 +119,7 @@ try { if ($_SERVER['argc']==1 || in_array('owner', $_SERVER['argv'])) { $url = "https://admin.fedoraproject.org/pkgdb/api/bugzilla"; - Parser::readAcls($acltable, $url); + // Parser::readAcls($acltable, $url); } if ($_SERVER['argc']==1 || in_array('optimize', $_SERVER['argv'])) { @@ -159,8 +159,9 @@ function report($db, $type) if (strpos($repo['sub'], '-os') || strpos($repo['sub'], '-beta') || strpos($repo['sub'], '-base') - || strpos($repo['sub'], '-optional') || strpos($repo['sub'], '-stable') + || strpos($repo['sub'], '-stream') + || strpos($repo['sub'], '-8.10') // Latest 8 as stream is closed ) { // For CentOS $repotype = 'base'; @@ -175,15 +176,13 @@ function report($db, $type) case "base": if ( isset($rpms[$repo['main']."-updates"]) ) { $display .= sprintf( - "%s-%s<br/>", - $rpm['ver'], - $rpm['rel'] + "%s<br/>", + $rpm['ver'] ); } else { $display .= sprintf( - "<strong>%s</strong>-%s<br/>", - $rpm['ver'], - $rpm['rel'] + "<strong>%s</strong><br/>", + $rpm['ver'] ); } if ( $verup==$verpm ) { @@ -192,9 +191,8 @@ function report($db, $type) break; case "": $display .= sprintf( - "<strong>%s</strong>-%s<br/>", - $rpm['ver'], - $rpm['rel'] + "<strong>%s</strong><br/>", + $rpm['ver'] ); if ( $verup==$verpm ) { $class="check"; @@ -202,10 +200,9 @@ function report($db, $type) break; case "updates": $display .= sprintf( - "<strong>%s</strong>-%s". + "<strong>%s</strong>". "<br/><small>(%s)</small><br/>", $rpm['ver'], - $rpm['rel'], $repo['sub'] ); if ($verup==$verpm && $class!='check') { @@ -214,9 +211,8 @@ function report($db, $type) break; case "testing": $display .= sprintf( - "%s-%s<br/><small>(%s)</small>", + "%s<br/><small>(%s)</small>", $rpm['ver'], - $rpm['rel'], $repo['sub'] ); if ($verup==$verpm && !$class) { @@ -281,4 +277,4 @@ try { $page_content = $smarty->fetch('rpm.tpl'); $smarty->assign('page_content', $page_content); $smarty->display('main.tpl'); -?>
\ No newline at end of file +?> diff --git a/smarty/templates/rpmphp/zoom.tpl b/smarty/templates/rpmphp/zoom.tpl index 960a908..6bc91d1 100644 --- a/smarty/templates/rpmphp/zoom.tpl +++ b/smarty/templates/rpmphp/zoom.tpl @@ -43,6 +43,8 @@ <td{if $k eq 'Description'} id="pkgdb_desc"{/if}> {if $k eq 'Bugzilla'} <a href="{$v}">Active bugs</a> + {elseif $k eq 'Packagist'} + <a href="https://packagist.org/packages/{$v}">{$v}</a> {elseif $k eq 'URL' or $k eq 'Pagure' or $k eq 'Packages' or $k eq 'Koschei'} <a href="{$v}">{$v}</a> {else} @@ -140,7 +140,7 @@ if ( !isset($name) || !$name ) { $summary['Type'] = $up['type']; } if ($rpm->pkgname) { - $summary['Composer name'] = $rpm->pkgname; + $summary['Packagist'] = $rpm->pkgname; } else if ($up && $up['channel']) { $summary['Channel'] = $up['channel']; } |