summaryrefslogtreecommitdiffstats
path: root/refresh.php
diff options
context:
space:
mode:
Diffstat (limited to 'refresh.php')
-rw-r--r--refresh.php1094
1 files changed, 676 insertions, 418 deletions
diff --git a/refresh.php b/refresh.php
index eb612de..3be354f 100644
--- a/refresh.php
+++ b/refresh.php
@@ -1,437 +1,695 @@
<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Refresh datas from server
+ *
+ * PHP version 5
+ *
+ * Copyright © 2010 Remi Collet
+ *
+ * This file is part of rpmphp.
+ *
+ * rpmphp is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * rpmphp is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with rpmphp. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Main
+ * @package RPMPHP
+ *
+ * @author Remi Collet <unknown@unknwown.com>
+ * @author Johan Cwiklinski <johan@x-tnd.be>
+ * @copyright 2010 Remi Collet
+ * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version
+ * @link http://github.com/remicollet/rpmphp/
+ * @since The begining of times.
+*/
chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
if (isset($_SERVER["SERVER_NAME"])) {
- echo "<pre>";
- ini_set("max_execution_time", "0");
- ini_set("memory_limit", "-1");
+ echo "<pre>";
+ ini_set("max_execution_time", "0");
+ ini_set("memory_limit", "-1");
- die("This script is launched twice a day, be patient");
+ die("This script is launched twice a day, be patient");
}
require "config.inc.php";
-function addUpstream ($db, $type, $channel, $name, $state, $ver, $statename="") {
-
- $sql1 = "INSERT INTO `upstream` SET type='$type', name='$name'";
- $db->exec($sql1);
-
- $sql2 = "UPDATE `upstream` SET channel='$channel', $state='$ver'";
- if ($statename) $sql2 .= ", state='$statename'";
- $sql2 .= " WHERE type='$type' AND name='$name'";
- $nb = $db->exec($sql2);
- if ($nb===false) echo date("r : ") . "SQL ERROR($sql2) = " . implode(" ", $db->errorInfo()) . "\n";
-
- return $nb;
+/**
+* To document
+*
+* @param Object $db Database reference
+* @param string $type type
+* @param string $channel channel
+* @param string $name name
+* @param string $state state
+* @param string $ver version
+* @param string $statename state name
+*
+* @return rows updated
+*/
+function addUpstream ($db, $type, $channel, $name, $state, $ver, $statename="")
+{
+
+ $sql1 = "INSERT INTO `upstream` SET type='$type', name='$name'";
+ $db->exec($sql1);
+
+ $sql2 = "UPDATE `upstream` SET channel='$channel', $state='$ver'";
+ if ($statename) {
+ $sql2 .= ", state='$statename'";
+ }
+ $sql2 .= " WHERE type='$type' AND name='$name'";
+ $nb = $db->exec($sql2);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR($sql2) = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ }
+
+ return $nb;
}
+
if ($_SERVER['argc']>1 && in_array('help', $_SERVER['argv'])) {
- echo "Options in: repo owner R pear pecl old\n";
- echo "Defaults: repo owner R pear pecl\n";
- die("\n");
+ echo "Options in: repo owner R pear pecl old\n";
+ echo "Defaults: repo owner R pear pecl\n";
+ die("\n");
}
try {
- $db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);
-
- // -------------------------------------------------------------------
- // Fedora Packages
- // -------------------------------------------------------------------
- echo date("r : ") . "Refreshing " . MYBASE . " database\n";
-
- if ($_SERVER['argc']==1 || in_array('repo', $_SERVER['argv'])) {
- if (in_array('empty', $_SERVER['argv'])) {
- $res=$db->query("SELECT * FROM repo WHERE stamp IS NULL");
- } else if (in_array('old', $_SERVER['argv'])) {
- $res=$db->query("SELECT * FROM repo");
- } else {
- $res=$db->query("SELECT * FROM repo WHERE active=1");
- }
- if (!$res) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else while ($row = $res->fetchObject()) {
- echo date("r : ") . "REPOSITORY " . $row->main . " " . $row->sub . "\n";
- $TimRemote = 0;
- $repomd = simplexml_load_file($row->url . "repodata/repomd.xml");
- if ($repomd) foreach($repomd->data as $data) if ($data->attributes()=="primary") {
- $TimRemote = $data->timestamp;
- $UrlRemote = $row->url . $data->location->attributes();
- }
- if ($TimRemote > $row->stamp) {
- echo date("r : ") . "Loading $UrlRemote\n";
-
- //$fic=gzopen("primary.xml.gz", "r");
- $fic=gzopen($UrlRemote, "r");
- if ($fic) {
- $txt="";
- while ($buf=gzread($fic,8196))
- $txt .= $buf;
- echo date("r : ") . "Read " . strlen($txt) . " bytes\n";
- gzclose($fic);
-
- $primary = simplexml_load_string($txt);
- echo date("r : ") . "Read " . $primary->attributes() . " packages\n";
- unset($txt);
-
- $sql = sprintf("DELETE FROM rpm WHERE repo_main='%s' AND repo_sub='%s'",
- $row->main, $row->sub);
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
-
- $tot=0;
- foreach ($primary->package as $package) if ($package->attributes()=='rpm'){
- $ver = $package->version->attributes();
- $sql = sprintf("INSERT INTO rpm SET repo_main='%s', repo_sub='%s', name='%s', epoch='%s', ver='%s', rel='%s', summary='%s', url='%s'",
- $row->main, $row->sub, $package->name, $ver['epoch'], $ver['ver'], $ver['rel'], addslashes($package->summary), $package->url);
- $nb=$db->exec($sql);
- if ($nb) $tot+=$nb;
- else echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- }
- echo date("r : ") . "Write $tot packages\n";
-
- $sql=sprintf("UPDATE repo SET stamp=%d WHERE ID=%d", $TimRemote, $row->ID);
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
-
- unset($primary);
- } else {
- echo date("r : ") . "ERROR : can't read $UrlRemote\n";
- }
- } else {
- echo date("r : ") . "no update needed : $TimRemote / " . $row->stamp . "\n";
- }
- }
- } // If ask
-
- // -------------------------------------------------------------------
- // Upstream Version
- // -------------------------------------------------------------------
- $sql="CREATE TABLE IF NOT EXISTS `upstream` (
- `name` varchar(100) NOT NULL,
- `type` varchar(20) NOT NULL,
- `channel` varchar(20) NOT NULL,
- `stable` varchar(20) DEFAULT NULL,
- `unstable` varchar(20) DEFAULT NULL,
- `state` varchar(20) DEFAULT NULL,
- PRIMARY KEY (`name`,`type`),
- KEY `name` (`name`),
- KEY `type` (`type`),
- KEY `channel` (`channel`))";
-
- if ($db->exec($sql)!==false)
- echo date("r : ") . "Check table 'upstream' ok\n";
- else echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
-
- // -------------------------------------------------------------------
- if ($_SERVER['argc']==1 || in_array('pecl', $_SERVER['argv'])) {
- echo date("r : ") . "PECL listLatestReleases - stable\n";
-
- $request = xmlrpc_encode_request("package.listLatestReleases", "stable");
- $context = stream_context_create(array('http' => array(
- 'method' => "POST",
- 'header' => "Content-Type: text/xml",
- 'content' => $request
- )));
- $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
- $stable = xmlrpc_decode($file);
- if (xmlrpc_is_fault($stable)) {
- echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
- } else {
- $sql = sprintf("DELETE FROM upstream WHERE type='pecl' AND channel='pecl'");
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
-
- $nb=0;
- foreach ($stable as $name => $info) {
- $rpmname="php-pecl-".str_replace("_","-",$name);
-
- $nb += addUpstream($db, "pecl", "pecl", $rpmname, "stable", $info["version"]);
- }
- echo date("r : ") . "Write $nb packages\n";
- // echo date("r : ") . "saved " . file_put_contents("cache/pecl-stable", serialize($stable)) . " bytes\n";
- }
-
- // -------------------------------------------------------------------
- echo date("r : ") . "PECL listLatestReleases - unstable\n";
-
- $request = xmlrpc_encode_request("package.listLatestReleases", array());
- $context = stream_context_create(array('http' => array(
- 'method' => "POST",
- 'header' => "Content-Type: text/xml",
- 'content' => $request
- )));
- $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
- $unstable = xmlrpc_decode($file);
- if (xmlrpc_is_fault($unstable)) {
- echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
- } else {
- $nb=0;
- foreach ($unstable as $name => $info) {
- $rpmname="php-pecl-".str_replace("_","-",$name);
-
- $nb += addUpstream($db, "pecl", "pecl", $rpmname, "unstable", $info["version"], $info["state"]);
- }
- echo date("r : ") . "Write $nb packages\n";
- //echo date("r : ") . "saved " . file_put_contents("cache/pecl-unstable", serialize($unstable)) . " bytes\n";
- }
- } // if in options
-
- // -------------------------------------------------------------------
- if ($_SERVER['argc']==1 || in_array('pear', $_SERVER['argv'])) {
- echo date("r : ") . "PEAR reading channels\n";
- $channels=array(
- "pear" => "pear.php.net"
- ,"doctrine" => "pear.phpdoctrine.org"
- ,"ezc" => "components.ez.no"
- ,"pdepend" => "pear.pdepend.org"
- ,"phing" => "pear.phing.info"
- ,"phpdb" => "pear.phpdb.org"
- ,"phpmd" => "pear.phpmd.org"
- ,"phpunit" => "pear.phpunit.de"
- ,"swift" => "pear.swiftmailer.org"
- ,"symphony" => "pear.symfony-project.com"
- );
- try {
- $nbtot=0;
-
- foreach ($channels as $channelname => $channelurl) {
-
- $channel = @simplexml_load_file("http://$channelurl/channel.xml");
- if (!$channel) throw new Exception("can't read PEAR site (channel of $channelname)");
-
- $rest = $channel->servers->primary->rest->baseurl[0];
- echo date("r : ") . "PEAR reading channel=$channelname, baseurl = $rest\n";
-
- $categories = @simplexml_load_file($rest."c/categories.xml");
- if (!$categories) throw new Exception("can't read PEAR site (categories)");
-
- $sql = sprintf("DELETE FROM upstream WHERE type='pear' AND channel='$channelname'");
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
-
- $nb=0;
- if (!isset($categories->c[0])) {
- echo date("r : ") . "Reading ALL\n"; // ezc only
- $pitxt = @file_get_contents($rest."p/packages.xml");
- if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."p/packagesinfo.xml)");
- $allpi = @simplexml_load_string($pitxt);
- foreach ($allpi->p as $name) {
- $pitxt = @file_get_contents($rest."r/".strtolower($name)."/allreleases.xml");
- if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."r/".strtolower($name)."/allreleases.xml");
- $pi = @simplexml_load_string($pitxt);
-
- $rpmname1="php-".$channelname."-".str_replace("_","-",$name);
- $rpmname2="php-".$channelname."-".$name;
-
- //echo $rpmname ."/".(string)$pi->r[0]->v."/". (string)$pi->r[0]->s."\n";
- addUpstream($db, "pear", $channelname, $rpmname1, "unstable", (string)$pi->r[0]->v, (string)$pi->r[0]->s);
- addUpstream($db, "pear", $channelname, $rpmname2, "unstable", (string)$pi->r[0]->v, (string)$pi->r[0]->s);
- foreach($pi->r as $rev) if ($rev->s=='stable') {
- //echo $rpmname ."/".(string)$rev->v."/". (string)$rev->s."\n";
- addUpstream($db, "pear", $channelname, $rpmname1, "stable", (string)$rev->v);
- addUpstream($db, "pear", $channelname, $rpmname2, "stable", (string)$rev->v);
- break;
- }
- $nb++;
- }
-
- } else foreach ($categories->c as $cat) {
- echo date("r : ") . "Reading $cat\n";
-
- $pitxt = @file_get_contents($rest."c/".urlencode($cat)."/packagesinfo.xml");
- if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."c/".urlencode($cat)."/packagesinfo.xml)");
- $pitxt = "<?" . preg_replace("/<\?xml.*?>/U", "", str_replace("\r\n", "\n", substr($pitxt, 2)));
-
- $pi = @simplexml_load_string($pitxt);
- if (!$pi) throw new Exception("can't read response ($cat)");
- foreach ($pi->pi as $ps) if (isset($ps->p->n) && isset($ps->a->r)) {
- $name=(string)$ps->p->n;
-
- if ($channelname=='phing' && $name=='phing') {
- $rpmname1="php-pear-phing";
- } else if ($channelname=='phpunit' && $name=='PHPUnit') {
- $rpmname1="php-pear-PHPUnit";
- } else {
- $rpmname1="php-".$channelname."-".str_replace("_","-",$name);
- }
- $rpmname2="php-".$channelname."-".$name;
-
- addUpstream($db, "pear", $channelname, $rpmname1, "unstable", (string)$ps->a->r[0]->v, (string)$ps->a->r[0]->s);
- addUpstream($db, "pear", $channelname, $rpmname2, "unstable", (string)$ps->a->r[0]->v, (string)$ps->a->r[0]->s);
- foreach($ps->a->r as $rev) if ($rev->s=='stable') {
- addUpstream($db, "pear", $channelname, $rpmname1, "stable", (string)$rev->v);
- addUpstream($db, "pear", $channelname, $rpmname2, "stable", (string)$rev->v);
- break;
- }
- $nb++;
- // echo $ps->p->n."\n";
- }
- }
- echo date("r : ") . "read $nb packages in $channelname\n";
- $nbtot += $nb;
- }
- echo date("r : ") . "read $nbtot packages in all channels\n";
-
- } catch (Exception $e) {
- echo date("r : ") . 'ERROR ' . $e->getMessage(), "\n";
- }
- } // if in options
- // -------------------------------------------------------------------
- if ($_SERVER['argc']==1 || in_array('R', $_SERVER['argv'])) {
-
- $repos = array(
- array("name"=>"R", "state"=>"stable", "url" => "http://cran.at.r-project.org/src/contrib/PACKAGES"),
- //array("name"=>"R-forge","state"=>"unstable", "url" => "http://r-forge.r-project.org/src/contrib/PACKAGES"),
- array("name"=>"biocp", "state"=>"stable", "url" => "http://www.bioconductor.org/packages/release/bioc/src/contrib/PACKAGES"),
- array("name"=>"biocp", "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/bioc/src/contrib/PACKAGES"),
- array("name"=>"bioca", "state"=>"stable", "url" => "http://www.bioconductor.org/packages/release/data/annotation/src/contrib/PACKAGES"),
- array("name"=>"bioca", "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/data/annotation/src/contrib/PACKAGES"),
- array("name"=>"bioce", "state"=>"stable", "url" => "http://www.bioconductor.org/packages/release/data/experiment/src/contrib/PACKAGES"),
- array("name"=>"bioce", "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/data/experiment/src/contrib/PACKAGES")
- );
- $tottot=0;
- foreach ($repos as $repo) {
- echo date("r : ") . "Reading " . $repo["name"] . " (" . $repo["state"] . ")\n";
- $index = @file_get_contents($repo["url"]);
- if (!$index) {
- echo date("r : ") . "Can't read [" . $repo["url"] . "], skip this channel\n";
- continue;
- }
- if ($repo["state"]=="stable") {
- $sql = sprintf("DELETE FROM upstream WHERE type='R' AND channel='%s'", $repo["name"]);
+ $db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);
+
+ // -------------------------------------------------------------------
+ // Fedora Packages
+ // -------------------------------------------------------------------
+ echo date("r : ") . "Refreshing " . MYBASE . " database\n";
+
+ if ($_SERVER['argc']==1 || in_array('repo', $_SERVER['argv'])) {
+ if (in_array('empty', $_SERVER['argv'])) {
+ $res=$db->query("SELECT * FROM repo WHERE stamp IS NULL");
+ } else if (in_array('old', $_SERVER['argv'])) {
+ $res=$db->query("SELECT * FROM repo");
+ } else {
+ $res=$db->query("SELECT * FROM repo WHERE active=1");
+ }
+ if (!$res) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ } else {
+ while ($row = $res->fetchObject()) {
+ echo date("r : ") . "REPOSITORY " . $row->main . " " .
+ $row->sub . "\n";
+ $TimRemote = 0;
+ $repomd = simplexml_load_file($row->url . "repodata/repomd.xml");
+ if ($repomd) {
+ foreach ($repomd->data as $data) {
+ if ($data->attributes()=="primary") {
+ $TimRemote = $data->timestamp;
+ $UrlRemote = $row->url . $data->location->attributes();
+ }
+ }
+ }
+ if ($TimRemote > $row->stamp) {
+ echo date("r : ") . "Loading $UrlRemote\n";
+
+ //$fic=gzopen("primary.xml.gz", "r");
+ $fic=gzopen($UrlRemote, "r");
+ if ($fic) {
+ $txt="";
+ while ($buf=gzread($fic, 8196)) {
+ $txt .= $buf;
+ }
+ echo date("r : ") . "Read " . strlen($txt) . " bytes\n";
+ gzclose($fic);
+
+ $primary = simplexml_load_string($txt);
+ echo date("r : ") . "Read " . $primary->attributes() .
+ " packages\n";
+ unset($txt);
+
+ $sql = sprintf(
+ "DELETE FROM rpm WHERE repo_main='%s' AND repo_sub='%s'",
+ $row->main,
+ $row->sub
+ );
+ $nb=$db->exec($sql);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ } else {
+ echo date("r : ") . "Delete $nb packages\n";
+ }
+
+ $tot=0;
+ foreach ($primary->package as $package) {
+ if ($package->attributes()=='rpm') {
+ $ver = $package->version->attributes();
+ $sql = sprintf(
+ "INSERT INTO rpm SET repo_main='%s', repo_sub='%s', name='%s', epoch='%s', ver='%s', rel='%s', summary='%s', url='%s'",
+ $row->main,
+ $row->sub,
+ $package->name,
+ $ver['epoch'],
+ $ver['ver'],
+ $ver['rel'],
+ addslashes($package->summary),
+ $package->url
+ );
+ $nb=$db->exec($sql);
+ if ($nb) {
+ $tot+=$nb;
+ } else {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ }
+ }
+ }
+ echo date("r : ") . "Write $tot packages\n";
+
+ $sql=sprintf(
+ "UPDATE repo SET stamp=%d WHERE ID=%d",
+ $TimRemote,
+ $row->ID
+ );
+ $nb=$db->exec($sql);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ }
+
+ unset($primary);
+ } else {
+ echo date("r : ") . "ERROR : can't read $UrlRemote\n";
+ }
+ } else {
+ echo date("r : ") . "no update needed : $TimRemote / " .
+ $row->stamp . "\n";
+ }
+ }
+ }
+ } // If ask
+
+ // -------------------------------------------------------------------
+ // Upstream Version
+ // -------------------------------------------------------------------
+ $sql="CREATE TABLE IF NOT EXISTS `upstream` (
+ `name` varchar(100) NOT NULL,
+ `type` varchar(20) NOT NULL,
+ `channel` varchar(20) NOT NULL,
+ `stable` varchar(20) DEFAULT NULL,
+ `unstable` varchar(20) DEFAULT NULL,
+ `state` varchar(20) DEFAULT NULL,
+ PRIMARY KEY (`name`,`type`),
+ KEY `name` (`name`),
+ KEY `type` (`type`),
+ KEY `channel` (`channel`))";
+
+ if ($db->exec($sql)!==false) {
+ echo date("r : ") . "Check table 'upstream' ok\n";
+ } else {
+ echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
+ }
+
+ // -------------------------------------------------------------------
+ if ($_SERVER['argc']==1 || in_array('pecl', $_SERVER['argv'])) {
+ echo date("r : ") . "PECL listLatestReleases - stable\n";
+
+ $request = xmlrpc_encode_request("package.listLatestReleases", "stable");
+ $context = stream_context_create(
+ array(
+ 'http' => array(
+ 'method' => "POST",
+ 'header' => "Content-Type: text/xml",
+ 'content' => $request
+ )
+ )
+ );
+ $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
+ $stable = xmlrpc_decode($file);
+ if (xmlrpc_is_fault($stable)) {
+ echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
+ } else {
+ $sql = sprintf("DELETE FROM upstream WHERE type='pecl' AND channel='pecl'");
$nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
- }
- $results=array();
- if (preg_match_all('/Package: *(.*)\nVersion: *(.*)\n/i',$index,$results,PREG_SET_ORDER)) {
- $tot=0;
- foreach ($results as $result) {
- //echo $result[1]." = ".$result[2]."\n";
- $rpmname = "R-".$result[1];
- $ver = str_replace('-', '.', $result[2]);
- if (addUpstream($db, "R", $repo["name"], $rpmname, $repo["state"], $ver, ($repo["state"]=="stable"?"":"devel"))) {
- $tot++;
- }
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ } else {
+ echo date("r : ") . "Delete $nb packages\n";
}
- echo date("r : ") . "Write $tot packages in this channel\n";
- $tottot += $tot;
- } else {
- echo date("r : ") . "No package in this channel\n";
- }
- }
- echo date("r : ") . "Write $tottot packages in all channels\n";
-/*
- * OLD VERSION parsing the HTML pages
- $repos = array(
- array("name"=>"R", "state"=>"stable", "url" => "http://cran.r-project.org/web/packages/"),
- array("name"=>"biocp", "state"=>"stable", "url" => "http://bioconductor.org/packages/release/bioc/"),
- array("name"=>"biocp", "state"=>"unstable", "url" => "http://bioconductor.org/packages/devel/bioc/"),
- array("name"=>"bioca", "state"=>"stable", "url" => "http://bioconductor.org/packages/release/data/annotation/"),
- array("name"=>"bioca", "state"=>"unstable", "url" => "http://bioconductor.org/packages/devel/data/annotation/"),
- array("name"=>"bioce", "state"=>"stable", "url" => "http://bioconductor.org/packages/release/data/experiment/"),
- array("name"=>"bioce", "state"=>"unstable", "url" => "http://bioconductor.org/packages/devel/data/experiment/")
- );
- $tottot=0;
- foreach ($repos as $repo) {
- echo date("r : ") . "Reading " . $repo["name"] . " (" . $repo["state"] . ")\n";
- $index = @file_get_contents($repo["url"]);
- if (!$index) {
- echo date("r : ") . "Can't read [" . $repo["url"] . "], skip this channel\n";
- continue;
- }
- if ($repo["state"]=="stable") {
- $sql = sprintf("DELETE FROM upstream WHERE type='R' AND channel='%s'", $repo["name"]);
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
- }
- if ($repo["name"] == "R") {
- $pos = strpos($index, 'ID="available-packages');
- $pat1 = '/<A HREF="(\.\.\/\.\.\/web\/.*)">(.*)<\/A>/iU';
- } else {
- $pos = 0;
- $pat1 = '/<a href="(.*)">(.*)<\/A>/iu';
- }
- $results=array();
- if (preg_match_all($pat1,$index,$results,PREG_SET_ORDER,$pos)) {
- $tot=0;
- foreach ($results as $result) {
- $page = @file_get_contents($repo["url"].$result[1]);
- $name = $result[2];
- $rpmname = "R-".$result[2];
- $ver=array();
- if (!$page) {
- echo date("r : ") . "Can't read [" . $repo["url"].$result[1] . "], skip this package\n";
-
- } else if (preg_match("/".$name."_((\d|-|\.)*)\.tar.gz/", $page, $ver)) {
-
- $ver = str_replace('-', '.', $ver[1]);
- $nb = addUpstream($db, "R", $repo["name"], $rpmname, $repo["state"], $ver, ($repo["state"]=="stable"?"":"devel"));
-
- }
-
- if ($nb) $tot+=$nb;
-
- }
- echo date("r : ") . "Write $tot packages in this channel\n";
- $tottot += $tot;
- } // Each package
- } // Each repo
- echo date("r : ") . "Write $tottot packages in all channels\n";
- */
- } // If R in options
-
- // -------------------------------------------------------------------
- // Package Owners from pkgdb (thanks Smootherfrog)
- // -------------------------------------------------------------------
- if ($_SERVER['argc']==1 || in_array('owner', $_SERVER['argv'])) {
-
- $sql="CREATE TABLE IF NOT EXISTS `acls` (
- `ID` int(11) NOT NULL AUTO_INCREMENT,
- `collection` varchar(100) NOT NULL,
- `name` varchar(100) NOT NULL,
- `summary` varchar(200) NOT NULL,
- `owner` varchar(50) DEFAULT NULL,
- `qa` varchar(50) DEFAULT NULL,
- `cc` varchar(100) DEFAULT NULL,
- PRIMARY KEY (`ID`),
- KEY `name` (`name`),
- KEY `collection` (`collection`),
- KEY `owner` (`owner`)) ENGINE=MyISAM";
-
- if ($db->exec($sql)!==false)
- echo date("r : ") . "Check table 'acls' ok\n";
- else echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
-
- $fic=fopen("https://admin.fedoraproject.org/pkgdb/lists/bugzilla?tg_format=plain", "r");
- if (!$fic) {
- echo date("r : ") . "ERROR reading pkgdb\n";
- } else {
- $sql="TRUNCATE `acls`";
- $nb=$db->exec($sql);
- if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- else echo date("r : ") . "Delete $nb packages\n";
-
- for ($tot=0 ; $line=fgetcsv($fic,1024,'|') ; ) if (count($line)>5 && substr($line[0],0,1)!='#') {
- for ($i=0; $i<6; $i++) $line[$i]=trim($line[$i]);
- $sql=sprintf("INSERT INTO `acls` SET collection='%s', name='%s', summary='%s'", $line[0], $line[1], addslashes($line[2]));
- if (!empty($line[3])) $sql .= sprintf(", owner='%s'", $line[3]);
- if (!empty($line[4])) $sql .= sprintf(", qa='%s'", $line[4]);
- if (!empty($line[5])) $sql .= sprintf(", cc='%s'", $line[5]);
- $nb=$db->exec($sql);
- if ($nb) $tot+=$nb;
- else echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
- }
- fclose($fic);
- echo date("r : ") . "wrote $tot package's owner\n";
- }
- } // If in options
-}
-catch(PDOException $e) {
- printf("%s ERREUR : %s\n", date("r"), $e->getMessage());
+ $nb=0;
+ foreach ($stable as $name => $info) {
+ $rpmname="php-pecl-".str_replace("_", "-", $name);
+
+ $nb += addUpstream(
+ $db,
+ "pecl",
+ "pecl",
+ $rpmname,
+ "stable",
+ $info["version"]
+ );
+ }
+ echo date("r : ") . "Write $nb packages\n";
+ // echo date("r : ") . "saved " . file_put_contents("cache/pecl-stable", serialize($stable)) . " bytes\n";
+ }
+
+ // -------------------------------------------------------------------
+ echo date("r : ") . "PECL listLatestReleases - unstable\n";
+
+ $request = xmlrpc_encode_request("package.listLatestReleases", array());
+ $context = stream_context_create(
+ array(
+ 'http' => array(
+ 'method' => "POST",
+ 'header' => "Content-Type: text/xml",
+ 'content' => $request
+ )
+ )
+ );
+ $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
+ $unstable = xmlrpc_decode($file);
+ if (xmlrpc_is_fault($unstable)) {
+ echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ".
+ "($stable[faultCode])";
+ } else {
+ $nb=0;
+ foreach ($unstable as $name => $info) {
+ $rpmname="php-pecl-".str_replace("_", "-", $name);
+
+ $nb += addUpstream(
+ $db,
+ "pecl",
+ "pecl",
+ $rpmname,
+ "unstable",
+ $info["version"],
+ $info["state"]
+ );
+ }
+ echo date("r : ") . "Write $nb packages\n";
+ //echo date("r : ") . "saved " .
+ // file_put_contents("cache/pecl-unstable", serialize($unstable)) .
+ // " bytes\n";
+ }
+ } // if in options
+
+ // -------------------------------------------------------------------
+ if ($_SERVER['argc']==1 || in_array('pear', $_SERVER['argv'])) {
+ echo date("r : ") . "PEAR reading channels\n";
+ $channels=array(
+ "pear" => "pear.php.net"
+ ,"doctrine" => "pear.phpdoctrine.org"
+ ,"ezc" => "components.ez.no"
+ ,"pdepend" => "pear.pdepend.org"
+ ,"phing" => "pear.phing.info"
+ ,"phpdb" => "pear.phpdb.org"
+ ,"phpmd" => "pear.phpmd.org"
+ ,"phpunit" => "pear.phpunit.de"
+ ,"swift" => "pear.swiftmailer.org"
+ ,"symphony" => "pear.symfony-project.com"
+ );
+ try {
+ $nbtot=0;
+
+ foreach ($channels as $channelname => $channelurl) {
+ $channel = @simplexml_load_file("http://$channelurl/channel.xml");
+ if (!$channel) {
+ throw new Exception(
+ "can't read PEAR site (channel of $channelname)"
+ );
+ }
+
+ $rest = $channel->servers->primary->rest->baseurl[0];
+ echo date("r : ") . "PEAR reading channel=$channelname" .
+ ", baseurl = $rest\n";
+
+ $categories = @simplexml_load_file($rest."c/categories.xml");
+ if (!$categories) {
+ throw new Exception("can't read PEAR site (categories)");
+ }
+
+ $sql = "DELETE FROM upstream WHERE type='pear' AND channel='".
+ $channelname."'";
+ $nb=$db->exec($sql);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " . implode(
+ " ",
+ $db->errorInfo()
+ ) . "\n";
+ } else {
+ echo date("r : ") . "Delete $nb packages\n";
+ }
+
+ $nb=0;
+ if (!isset($categories->c[0])) {
+ echo date("r : ") . "Reading ALL\n"; // ezc only
+ $pitxt = @file_get_contents($rest."p/packages.xml");
+ if (!$pitxt) {
+ throw new Exception(
+ "can't read PEAR site (".$rest."p/packagesinfo.xml)"
+ );
+ }
+ $allpi = @simplexml_load_string($pitxt);
+ foreach ($allpi->p as $name) {
+ $pitxt = @file_get_contents(
+ $rest."r/".strtolower($name)."/allreleases.xml"
+ );
+ if (!$pitxt) {
+ throw new Exception(
+ "can't read PEAR site (".$rest."r/".
+ strtolower($name)."/allreleases.xml"
+ );
+ }
+ $pi = @simplexml_load_string($pitxt);
+
+ $rpmname1="php-".$channelname."-".
+ str_replace("_", "-", $name);
+ $rpmname2="php-".$channelname."-".$name;
+
+ //echo $rpmname ."/".(string)$pi->r[0]->v."/".
+ // (string)$pi->r[0]->s."\n";
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname1,
+ "unstable",
+ (string)$pi->r[0]->v,
+ (string)$pi->r[0]->s
+ );
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname2,
+ "unstable",
+ (string)$pi->r[0]->v,
+ (string)$pi->r[0]->s
+ );
+ foreach ($pi->r as $rev) {
+ if ($rev->s=='stable') {
+ //echo $rpmname ."/".(string)$rev->v."/".
+ // (string)$rev->s."\n";
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname1,
+ "stable",
+ (string)$rev->v
+ );
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname2,
+ "stable",
+ (string)$rev->v
+ );
+ break;
+ }
+ }
+ $nb++;
+ }
+
+ } else {
+ foreach ($categories->c as $cat) {
+ echo date("r : ") . "Reading $cat\n";
+
+ $pitxt = @file_get_contents(
+ $rest."c/".urlencode($cat)."/packagesinfo.xml"
+ );
+ if (!$pitxt) {
+ throw new Exception(
+ "can't read PEAR site (".$rest."c/".
+ urlencode($cat)."/packagesinfo.xml)"
+ );
+ }
+ $pitxt = "<?" . preg_replace(
+ "/<\?xml.*?>/U",
+ "",
+ str_replace("\r\n", "\n", substr($pitxt, 2))
+ );
+
+ $pi = @simplexml_load_string($pitxt);
+ if (!$pi) {
+ throw new Exception("can't read response ($cat)");
+ }
+ foreach ($pi->pi as $ps) {
+ if (isset($ps->p->n) && isset($ps->a->r)) {
+ $name=(string)$ps->p->n;
+
+ if ($channelname=='phing' && $name=='phing') {
+ $rpmname1="php-pear-phing";
+ } else if ($channelname=='phpunit'
+ && $name=='PHPUnit'
+ ) {
+ $rpmname1="php-pear-PHPUnit";
+ } else {
+ $rpmname1="php-".$channelname."-".
+ str_replace("_", "-", $name);
+ }
+ $rpmname2="php-".$channelname."-".$name;
+
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname1,
+ "unstable",
+ (string)$ps->a->r[0]->v,
+ (string)$ps->a->r[0]->s
+ );
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname2,
+ "unstable",
+ (string)$ps->a->r[0]->v,
+ (string)$ps->a->r[0]->s
+ );
+ foreach ($ps->a->r as $rev) {
+ if ($rev->s=='stable') {
+ addUpstream(
+ $db, "pear",
+ $channelname,
+ $rpmname1,
+ "stable",
+ (string)$rev->v
+ );
+ addUpstream(
+ $db,
+ "pear",
+ $channelname,
+ $rpmname2,
+ "stable",
+ (string)$rev->v
+ );
+ break;
+ }
+ }
+ $nb++;
+ // echo $ps->p->n."\n";
+ }
+ }
+ }
+ }
+ echo date("r : ") . "read $nb packages in $channelname\n";
+ $nbtot += $nb;
+ }
+ echo date("r : ") . "read $nbtot packages in all channels\n";
+
+ } catch (Exception $e) {
+ echo date("r : ") . 'ERROR ' . $e->getMessage(), "\n";
+ }
+ } // if in options
+
+ // -------------------------------------------------------------------
+ if ($_SERVER['argc']==1 || in_array('R', $_SERVER['argv'])) {
+
+ $repos = array(
+ array(
+ "name" => "R",
+ "state" => "stable",
+ "url" => "http://cran.at.r-project.org/src/contrib/PACKAGES"
+ ),
+ //array("name"=>"R-forge","state"=>"unstable", "url" => "http://r-forge.r-project.org/src/contrib/PACKAGES"),
+ array(
+ "name" => "biocp",
+ "state" => "stable",
+ "url" => "http://www.bioconductor.org/packages/release/bioc/src/contrib/PACKAGES"
+ ),
+ array(
+ "name" => "biocp",
+ "state" => "unstable",
+ "url" => "http://www.bioconductor.org/packages/devel/bioc/src/contrib/PACKAGES"
+ ),
+ array(
+ "name" => "bioca",
+ "state" => "stable",
+ "url" => "http://www.bioconductor.org/packages/release/data/annotation/src/contrib/PACKAGES"
+ ),
+ array(
+ "name" => "bioca",
+ "state" => "unstable",
+ "url" => "http://www.bioconductor.org/packages/devel/data/annotation/src/contrib/PACKAGES"
+ ),
+ array(
+ "name" => "bioce",
+ "state" => "stable",
+ "url" => "http://www.bioconductor.org/packages/release/data/experiment/src/contrib/PACKAGES"
+ ),
+ array(
+ "name" => "bioce",
+ "state" => "unstable",
+ "url" => "http://www.bioconductor.org/packages/devel/data/experiment/src/contrib/PACKAGES"
+ )
+ );
+ $tottot=0;
+ foreach ($repos as $repo) {
+ echo date("r : ") . "Reading " . $repo["name"] . " (" .
+ $repo["state"] . ")\n";
+ $index = @file_get_contents($repo["url"]);
+ if (!$index) {
+ echo date("r : ") . "Can't read [" . $repo["url"] .
+ "], skip this channel\n";
+ continue;
+ }
+ if ($repo["state"]=="stable") {
+ $sql = sprintf(
+ "DELETE FROM upstream WHERE type='R' AND channel='%s'",
+ $repo["name"]
+ );
+ $nb=$db->exec($sql);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ } else {
+ echo date("r : ") . "Delete $nb packages\n";
+ }
+ }
+ $results=array();
+ if (preg_match_all('/Package: *(.*)\nVersion: *(.*)\n/i', $index, $results, PREG_SET_ORDER)) {
+ $tot=0;
+ foreach ($results as $result) {
+ //echo $result[1]." = ".$result[2]."\n";
+ $rpmname = "R-".$result[1];
+ $ver = str_replace('-', '.', $result[2]);
+ $add_upstream = addUpstream(
+ $db,
+ "R",
+ $repo["name"],
+ $rpmname,
+ $repo["state"],
+ $ver,
+ ($repo["state"]=="stable"?"":"devel")
+ );
+
+ if ($add_upstream) {
+ $tot++;
+ }
+ }
+ echo date("r : ") . "Write $tot packages in this channel\n";
+ $tottot += $tot;
+ } else {
+ echo date("r : ") . "No package in this channel\n";
+ }
+ }
+ echo date("r : ") . "Write $tottot packages in all channels\n";
+
+ } // If R in options
+
+ // -------------------------------------------------------------------
+ // Package Owners from pkgdb (thanks Smootherfrog)
+ // -------------------------------------------------------------------
+ if ($_SERVER['argc']==1 || in_array('owner', $_SERVER['argv'])) {
+
+ $sql="CREATE TABLE IF NOT EXISTS `acls` (
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
+ `collection` varchar(100) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `summary` varchar(200) NOT NULL,
+ `owner` varchar(50) DEFAULT NULL,
+ `qa` varchar(50) DEFAULT NULL,
+ `cc` varchar(100) DEFAULT NULL,
+ PRIMARY KEY (`ID`),
+ KEY `name` (`name`),
+ KEY `collection` (`collection`),
+ KEY `owner` (`owner`)) ENGINE=MyISAM";
+
+ if ($db->exec($sql)!==false) {
+ echo date("r : ") . "Check table 'acls' ok\n";
+ } else {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ }
+
+ $fic=fopen(
+ "https://admin.fedoraproject.org/pkgdb/lists/bugzilla?tg_format=plain",
+ "r"
+ );
+ if (!$fic) {
+ echo date("r : ") . "ERROR reading pkgdb\n";
+ } else {
+ $sql="TRUNCATE `acls`";
+ $nb=$db->exec($sql);
+ if ($nb===false) {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ } else {
+ echo date("r : ") . "Delete $nb packages\n";
+ }
+
+ for ($tot=0 ; $line=fgetcsv($fic, 1024, '|'); ) {
+ if (count($line)>5 && substr($line[0], 0, 1)!='#') {
+ for ($i=0; $i<6; $i++) {
+ $line[$i]=trim($line[$i]);
+ }
+ $sql=sprintf(
+ "INSERT INTO `acls` SET collection='%s', name='%s', summary='%s'",
+ $line[0],
+ $line[1],
+ addslashes($line[2])
+ );
+ if (!empty($line[3])) {
+ $sql .= sprintf(", owner='%s'", $line[3]);
+ }
+ if (!empty($line[4])) {
+ $sql .= sprintf(", qa='%s'", $line[4]);
+ }
+ if (!empty($line[5])) {
+ $sql .= sprintf(", cc='%s'", $line[5]);
+ }
+ $nb=$db->exec($sql);
+ if ($nb) {
+ $tot+=$nb;
+ } else {
+ echo date("r : ") . "SQL ERROR = " .
+ implode(" ", $db->errorInfo()) . "\n";
+ }
+ }
+ }
+ fclose($fic);
+ echo date("r : ") . "wrote $tot package's owner\n";
+ }
+ } // If in options
+
+} catch(PDOException $e) {
+ printf("%s ERREUR : %s\n", date("r"), $e->getMessage());
}
-if (isset($_SERVER["SERVER_NAME"])) echo "</pre>";
+if (isset($_SERVER["SERVER_NAME"])) {
+ echo "</pre>";
+}
?>