diff options
-rw-r--r-- | class/Parser.php | 203 | ||||
-rw-r--r-- | refresh.php | 197 |
2 files changed, 210 insertions, 190 deletions
diff --git a/class/Parser.php b/class/Parser.php index 3113718..ef4a751 100644 --- a/class/Parser.php +++ b/class/Parser.php @@ -363,5 +363,208 @@ class Parser } return $nb; } + + /** + * Parse the content of all PEAR repository + * + * @param TableUpstream $uptable the table to write to + * @param string $channelname the channel name + * @param string $channelurl the channel URL + * + * @return integer number of parsed line + */ + static public function readOnePear(TableUpstream $uptable, $channelname, $channelurl) + { + $channel = @simplexml_load_file("http://$channelurl/channel.xml"); + if (!$channel) { + self::log("can't read PEAR site (channel of $channelname)"); + return 0; + } + + $rest = $channel->servers->primary->rest->baseurl[0]; + self::log("PEAR reading channel=$channelname, baseurl = $rest"); + + $categories = @simplexml_load_file($rest."c/categories.xml"); + if (!$categories) { + self::log("can't read PEAR site (categories)"); + return 0; + } + + $crit = array('type'=>'pear', 'channel'=>$channelname); + $nb = $uptable->delete($crit); + self::log("Delete $nb packages"); + + $nb=0; + if (!isset($categories->c[0])) { + self::log("Reading ALL"); // ezc only + $pitxt = @file_get_contents($rest."p/packages.xml"); + if (!$pitxt) { + self::log("can't read PEAR site (".$rest."p/packagesinfo.xml)"); + return 0; + } + $allpi = @simplexml_load_string($pitxt); + foreach ($allpi->p as $name) { + $pitxt = @file_get_contents( + $rest."r/".strtolower($name)."/allreleases.xml" + ); + if (!$pitxt) { + self::log( + "can't read PEAR site (".$rest."r/". + strtolower($name)."/allreleases.xml" + ); + continue; + } + $pi = @simplexml_load_string($pitxt); + + $rpmname1="php-".$channelname."-". + str_replace("_", "-", $name); + $rpmname2="php-".$channelname."-".$name; + + $uptable->record( + "pear", + $channelname, + $rpmname1, + (string)$pi->r[0]->v, + false, + (string)$pi->r[0]->s + ); + $uptable->record( + "pear", + $channelname, + $rpmname2, + (string)$pi->r[0]->v, + false, + (string)$pi->r[0]->s + ); + foreach ($pi->r as $rev) { + if ($rev->s=='stable') { + $uptable->record( + "pear", + $channelname, + $rpmname1, + (string)$rev->v, + true + ); + $uptable->record( + "pear", + $channelname, + $rpmname2, + (string)$rev->v, + true + ); + break; + } + } + $nb++; + } + + } else { + foreach ($categories->c as $cat) { + self::log("Reading $cat"); + + $pitxt = @file_get_contents( + $rest."c/".urlencode($cat)."/packagesinfo.xml" + ); + if (!$pitxt) { + self::log( + "can't read PEAR site (".$rest."c/". + urlencode($cat)."/packagesinfo.xml)" + ); + continue; + } + $pitxt = "<?" . preg_replace( + "/<\?xml.*?>/U", + "", + str_replace("\r\n", "\n", substr($pitxt, 2)) + ); + + $pi = @simplexml_load_string($pitxt); + if (!$pi) { + self::log("can't read response ($cat)"); + continue; + } + 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; + + $uptable->record( + "pear", + $channelname, + $rpmname1, + (string)$ps->a->r[0]->v, + false, + (string)$ps->a->r[0]->s + ); + $uptable->record( + "pear", + $channelname, + $rpmname2, + (string)$ps->a->r[0]->v, + false, + (string)$ps->a->r[0]->s + ); + foreach ($ps->a->r as $rev) { + if ($rev->s=='stable') { + $uptable->record( + "pear", + $channelname, + $rpmname1, + (string)$rev->v, + true + ); + $uptable->record( + "pear", + $channelname, + $rpmname2, + (string)$rev->v, + true + ); + break; + } + } + $nb++; + } + } + } + } + self::log("read $nb packages in $channelname"); + return $nb; + + } + /** + * Parse the content of all PEAR repository + * + * @param TableUpstream $uptable the table to write to + * @param TablePearRepo $pear the table to read from + * + * @return integer number of parsed line + */ + static public function readPear(TableUpstream $uptable, TablePearRepo $pear) + { + $tot = 0; + + self::log("PEAR reading channels"); + + $channels = $pear->getAllRepo(true); + foreach ($channels as $channelname => $channelurl) { + $tot += self::readOnePear($uptable, $channelname, $channelurl); + } + + self::log("Write $tot packages in all channels"); + return $tot; + } + } ?>
\ No newline at end of file diff --git a/refresh.php b/refresh.php index 14b0020..6c7827b 100644 --- a/refresh.php +++ b/refresh.php @@ -63,6 +63,7 @@ try { echo date("r : ") . "Refreshing " . MYBASE . " database\n"; if ($_SERVER['argc']==1 || in_array('repo', $_SERVER['argv'])) { + if (in_array('empty', $_SERVER['argv'])) { $crit = array('stamp' => null); } else if (in_array('old', $_SERVER['argv'])) { @@ -72,7 +73,7 @@ try { } Parser::readRpm(new TableRpm($db), new TableRpmRepo($db), $crit); - } // If ask + } // ------------------------------------------------------------------- // Upstream Version @@ -83,202 +84,19 @@ try { if ($_SERVER['argc']==1 || in_array('pecl', $_SERVER['argv'])) { Parser::readPecl($uptable, 'http://pecl.php.net/xmlrpc.php'); - - } // if in options + } // ------------------------------------------------------------------- if ($_SERVER['argc']==1 || in_array('pear', $_SERVER['argv'])) { - echo date("r : ") . "PEAR reading channels\n"; - $pear = new TablePearRepo($db); - $channels = $pear->getAllRepo(true); - 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)"); - } - - $crit = array('type'=>'pear', 'channel'=>$channelname); - $nb = $uptable->delete($crit); - 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"; - $uptable->record( - "pear", - $channelname, - $rpmname1, - (string)$pi->r[0]->v, - false, - (string)$pi->r[0]->s - ); - $uptable->record( - "pear", - $channelname, - $rpmname2, - (string)$pi->r[0]->v, - false, - (string)$pi->r[0]->s - ); - foreach ($pi->r as $rev) { - if ($rev->s=='stable') { - //echo $rpmname ."/".(string)$rev->v."/". - // (string)$rev->s."\n"; - $uptable->record( - "pear", - $channelname, - $rpmname1, - (string)$rev->v, - true - ); - $uptable->record( - "pear", - $channelname, - $rpmname2, - (string)$rev->v, - true - ); - 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; - - $uptable->record( - "pear", - $channelname, - $rpmname1, - (string)$ps->a->r[0]->v, - false, - (string)$ps->a->r[0]->s - ); - $uptable->record( - "pear", - $channelname, - $rpmname2, - (string)$ps->a->r[0]->v, - false, - (string)$ps->a->r[0]->s - ); - foreach ($ps->a->r as $rev) { - if ($rev->s=='stable') { - $uptable->record( - "pear", - $channelname, - $rpmname1, - (string)$rev->v, - true - ); - $uptable->record( - "pear", - $channelname, - $rpmname2, - (string)$rev->v, - true - ); - 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 + Parser::readPear($uptable, new TablePearRepo($db)); + } // ------------------------------------------------------------------- if ($_SERVER['argc']==1 || in_array('R', $_SERVER['argv'])) { Parser::readR($uptable, new TableRRepo($db)); - - } // If R in options + } // ------------------------------------------------------------------- // Package Owners from pkgdb (thanks Smootherfrog) @@ -287,8 +105,7 @@ try { $url = "https://admin.fedoraproject.org/pkgdb/lists/bugzilla?tg_format=plain"; Parser::readAcls(new TableAcls($db), $url); - - } // If in options + } } catch(PDOException $e) { printf("%s ERREUR : %s\n", date("r"), $e->getMessage()); |