From 90c1355a7547a041c70733af94583ff59c83c9b1 Mon Sep 17 00:00:00 2001 From: Stig Bakken Date: Tue, 17 Apr 2001 02:33:45 +0000 Subject: [PATCH] * PEAR_Installer un-broken again, it still doesn't update the package list though * better error handling in "pear" script --- pear/PEAR/Installer.php | 70 ++++++++++++++++++++++++++--------------- pear/PEAR/Packager.php | 2 +- pear/scripts/pear.in | 14 ++++++--- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php index 2cb212b208..23b0dc77aa 100644 --- a/pear/PEAR/Installer.php +++ b/pear/PEAR/Installer.php @@ -91,7 +91,7 @@ class PEAR_Installer extends PEAR $this->extdir = $extdir; $this->docdir = $docdir; $this->statedir = "/var/lib/php"; // XXX FIXME Windows - $this->loadPackageList("$this->statedir/packagelist.xml"); + $this->loadPackageList("$this->statedir/packages.lst"); } // }}} @@ -182,15 +182,26 @@ class PEAR_Installer extends PEAR function loadPackageList($file) { $this->pkglist_file = $file; + $this->pkglist = array(); if (!file_exists($file)) { - touch($file); + if (!@touch($file)) { + return $this->raiseError("touch($file): $php_errormsg"); + } } - $fp = $this->pkglist_fp = fopen($file, "r"); + $fp = $this->pkglist_fp = @fopen($file, "r"); + if (!is_resource($fp)) { + return $this->raiseError("fopen($file): $php_errormsg"); + } $this->lockPackageList(); - while ($line = fgets($fp, 2048)) { - list($type, $name, $file) = explode(" ", trim($line)); - $this->pkglist[$type][$name] = $file; - } + $versionline = trim(fgets($fp, 2048)); + if ($versionline == ";1") { + while ($line = fgets($fp, 2048)) { + list($name, $version, $file) = explode(";", trim($line)); + $this->pkglist[$name]["version"] = $version; + $this->pkglist[$name]["files"][] = $file; + } + } + $this->unlockPackageList(); } // }}} @@ -198,19 +209,19 @@ class PEAR_Installer extends PEAR function savePackageList() { $fp = $this->pkglist_fp; - $wfp = fopen($this->pkglist_file, "w"); - if (!$wfp) { - return false; + $wfp = @fopen($this->pkglist_file, "w"); + if (!is_resource($wfp)) { + return $this->raiseError("could not write $this->pkglist_file"); } if (is_resource($fp)) { fclose($fp); } $this->pkglist_fp = $fp = $wfp; - reset($this->pkglist); - while (list($type, $entry) = each($this->pkglist)) { - reset($entry); - while (list($name, $file) = each($entry)) { - fwrite($fp, "$type $name $file\n"); + fwrite($fp, ";1\n"); + foreach ($this->pkglist as $name => $entry) { + $ver = $entry["version"]; + foreach ($entry["files"] as $file) { + fwrite($fp, "$name;$ver;$file\n"); } } fclose($fp); @@ -338,14 +349,13 @@ class PEAR_Installer extends PEAR $this->current_element = false; $this->destdir = ''; - while ($data = fread($fp, 2048)) { - if (!xml_parse($xp, $data, feof($fp))) { - $err = $this->raiseError(sprintf("XML error: %s at line %d", - xml_error_string(xml_get_error_code($xp)), - xml_get_current_line_number($xp))); - xml_parser_free($xp); - return $err; - } + $data = fread($fp, filesize($descfile)); + if (!xml_parse($xp, $data, 1)) { + $msg = sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($xp)), + xml_get_current_line_number($xp)); + xml_parser_free($xp); + return $this->raiseError($msg); } xml_parser_free($xp); @@ -362,10 +372,12 @@ class PEAR_Installer extends PEAR $this->current_attributes = $attribs; switch ($name) { case "Package": +/* if (strtolower($attribs["Type"]) != "binary") { return $this->raiseError("Invalid package: only binary packages supported yet."); } $this->pkginfo['pkgtype'] = strtolower($attribs["Type"]); +*/ break; } } @@ -382,10 +394,16 @@ class PEAR_Installer extends PEAR // {{{ charHandler() function charHandler($xp, $data) { - // XXX FIXME: $data may be incomplete, all of this code should - // actually be in endHandler. - // + $next = $this->element_stack[sizeof($this->element_stack)-1]; switch ($this->current_element) { + case "Name": + if ($next == "Package") { + $this->pkginfo["name"] = $data; + } + break; + case "Version": + $this->pkginfo["version"] = $data; + break; case "Dir": if (!$this->phpdir) { break; diff --git a/pear/PEAR/Packager.php b/pear/PEAR/Packager.php index 2d67da771c..610e00b848 100644 --- a/pear/PEAR/Packager.php +++ b/pear/PEAR/Packager.php @@ -158,7 +158,7 @@ class PEAR_Packager extends PEAR " ".$this->pkginfo["Package,Summary"]."\n". " \n". " ".$this->pkginfo["Maintainer,Initials"]."\n". - " ".$this->pkginfo["Maintainer,Name"]."\n". + " ".$this->pkginfo["Maintainer,Name"]."\n". " ".$this->pkginfo["Maintainer,Email"]."\n". " \n". " \n". diff --git a/pear/scripts/pear.in b/pear/scripts/pear.in index 7ae61dbe2a..2cf5746969 100644 --- a/pear/scripts/pear.in +++ b/pear/scripts/pear.in @@ -24,14 +24,20 @@ switch ($command) { case "install": $package = $options[1][2]; $installer =& new PEAR_Installer(); - $installer->Install($package); - print "install ok\n"; + if (PEAR::isError($installer->Install($package))) { + print "\ninstall failed\n"; + } else { + print "install ok\n"; + } break; case "package": $pkginfofile = $options[1][2]; $packager =& new PEAR_Packager(); - $packager->Package($pkginfofile); - print "package ok\n"; + if (PEAR::isError($packager->Package($pkginfofile))) { + print "\npackage failed\n"; + } else { + print "package ok\n"; + } break; default: usage(); -- 2.40.0