]> granicus.if.org Git - php/commitdiff
* PEAR_Installer un-broken again, it still doesn't update the
authorStig Bakken <ssb@php.net>
Tue, 17 Apr 2001 02:33:45 +0000 (02:33 +0000)
committerStig Bakken <ssb@php.net>
Tue, 17 Apr 2001 02:33:45 +0000 (02:33 +0000)
  package list though
* better error handling in "pear" script

pear/PEAR/Installer.php
pear/PEAR/Packager.php
pear/scripts/pear.in

index 2cb212b208347964d45ad67bd20c7b1106252d69..23b0dc77aa750213d1b82f58405af5386d6dc7e0 100644 (file)
@@ -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;
index 2d67da771c7aaf77d72dffa07850725e130d0710..610e00b848c9a238a79d88c47377b7d027ec1a41 100644 (file)
@@ -158,7 +158,7 @@ class PEAR_Packager extends PEAR
               "  <Summary>".$this->pkginfo["Package,Summary"]."</Summary>\n".
               "  <Maintainer>\n".
               "    <Initials>".$this->pkginfo["Maintainer,Initials"]."</Initials>\n".
-              "    <Name>".$this->pkginfo["Maintainer,Name"]."</Initials>\n".
+              "    <Name>".$this->pkginfo["Maintainer,Name"]."</Name>\n".
               "    <Email>".$this->pkginfo["Maintainer,Email"]."</Email>\n".
               "  </Maintainer>\n".
               "  <Release>\n".
index 7ae61dbe2a756976897eeaf1066a89ed1adde9fb..2cf5746969b8d98423217d449c8e4f6382332c95 100644 (file)
@@ -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();