]> granicus.if.org Git - php/commitdiff
* implemented "pear list-packages", the first sub-command using xmlrpc
authorStig Bakken <ssb@php.net>
Fri, 26 Oct 2001 11:45:21 +0000 (11:45 +0000)
committerStig Bakken <ssb@php.net>
Fri, 26 Oct 2001 11:45:21 +0000 (11:45 +0000)
pear/Makefile.in
pear/PEAR/Remote.php
pear/scripts/pear.in

index 9d8cf3620890b5100e0524046dd29e06afa4e44f..c0dc8999ca0b80bebb7894c5003640ff2e00b8de 100644 (file)
@@ -103,6 +103,7 @@ PEAR_FILES = \
        PEAR/Config.php \
        PEAR/Installer.php \
        PEAR/Packager.php \
+       PEAR/Remote.php \
        PEAR/Uploader.php \
        Payment/Verisign.php \
        Schedule/At.php \
index b8132151766a69ece39552ab3fa7984597ce58be..5c66b8e9414396b9556bbc389156a7def3b94de4 100644 (file)
@@ -52,24 +52,26 @@ class PEAR_Remote extends PEAR
         }
         $params = array_slice(func_get_args(), 1);
         $request = xmlrpc_encode_request($method, $params);
-        print "<p><b>Request:</b><p>\n";
-        print "<pre>";
-        print htmlspecialchars($request);
-        print "</pre>";
-        $fp = @fsockopen($config->get("master_server"), 80);
+        $server_host = $this->config_object->get("master_server");
+        $server_port = 80;
+        flush();
+        $fp = @fsockopen($server_host, $server_port);
         if (!$fp) {
             return $this->raiseError("PEAR_Remote::call: connect failed");
         }
         $len = strlen($request);
         fwrite($fp, ("POST /xmlrpc.php HTTP/1.0\r\n".
+                     "Host: $server_host:$server_port\r\n".
                      "Content-type: text/xml\r\n".
                      "Content-length: $len\r\n".
                      "\r\n$request"));
-        print "Response:\n";
-        while ($line = fgets($fp, 2048)) {
-            print $line;
+        $response = '';
+        while (trim(fgets($fp, 2048)) != ''); // skip headers
+        while ($chunk = fread($fp, 10240)) {
+            $response .= $chunk;
         }
-        // XXX UNFINISHED
+        fclose($fp);
+        return xmlrpc_decode($response);
     }
 
     // }}}
index c5f7ec642bf0459bc8067fd443b174c62c90373c..ecdfa881025dd69327b5daa32f4539219d8e4c24 100644 (file)
@@ -137,6 +137,23 @@ switch ($command) {
     case 'list-packages': {
         include_once 'PEAR/Remote.php';
         $remote = new PEAR_Remote($config);
+        $result = $remote->call('package.listAll');
+        $i = $j = 0;
+        foreach ($result as $package) {
+            if ($i++ % 20 == 0) {
+                if ($j++ > 0) {
+                    print "\n";
+                }
+                printf("%-20s %-10s %-15s %s\n",
+                       "Package", "Stable", "Lead", "Category");
+                print str_repeat("=", 75)."\n";
+            }
+            $stable = $package['stable'];
+            printf("%-20s %-10s %-15s %s\n", $package['name'],
+                   $stable ? $stable : "???",
+                   $package['lead'], $package['category']);
+        }
+        break;
     }
 
     // }}}