Commit in PEAR_Server on MAIN
Server.php+14-91.7 -> 1.8
Server.php+14-91.7 -> 1.8
Server/Exception.php+221.10 -> 1.11
+50-18
3 modified files
use stream_copy_to_stream() for saving the .tar
add exceptions for file open issues
make deleting the temporary file optional for custom implementations of the server

PEAR_Server
Server.php 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- Server.php	2 Nov 2005 04:34:52 -0000	1.7
+++ Server.php	10 Feb 2006 16:27:06 -0000	1.8
@@ -105,8 +105,9 @@
 
     /**
      * @param Chiara_PEAR_Server_Release
+     * @param bool if true, then the temporary uploaded release will be deleted
      */
-    public function addRelease($release)
+    public function addRelease($release, $deleterelease = true)
     {
         if ($this->_validLocalChannel($channel = $release->getChannel())) {
             if ($this->_backend[$channel]->validPackage($release->getPackage())) {
@@ -116,16 +117,20 @@
                     $new = $this->_releaseDir . DIRECTORY_SEPARATOR .
                         $release->getPackage() . '-' . $release->getVersion();
                     $gp = gzopen($archive, 'rb');
-                    $contents = '';
-                    while(!gzeof($gp)) {
-                        $contents .= gzread($gp, filesize($archive));
+                    if (!$gp) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotOpenRelease($archive);
                     }
-                    gzclose($gp);
                     $fp = fopen($new . '.tar', 'wb');
-                    fwrite($fp, $contents);
-                    fclose($fp);
-                    copy($release->getFilepath(), $new . '.tgz');
-                    unlink($release->getFilepath());
+                    if (!$fp) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotSaveRelease($new . '.tar');
+                    }
+                    stream_copy_to_stream($gp, $fp);
+                    if (!copy($release->getFilepath(), $new . '.tgz')) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotSaveRelease($new . '.tgz');
+                    }
+                    if ($deleterelease) {
+                        unlink($release->getFilepath());
+                    }
                     // for the database, save the .tgz
                     $release->setFilepath($new . '.tgz');
                 } else {

PEAR_Server
Server.php 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- Server.php	2 Nov 2005 04:34:52 -0000	1.7
+++ Server.php	10 Feb 2006 16:27:06 -0000	1.8
@@ -105,8 +105,9 @@
 
     /**
      * @param Chiara_PEAR_Server_Release
+     * @param bool if true, then the temporary uploaded release will be deleted
      */
-    public function addRelease($release)
+    public function addRelease($release, $deleterelease = true)
     {
         if ($this->_validLocalChannel($channel = $release->getChannel())) {
             if ($this->_backend[$channel]->validPackage($release->getPackage())) {
@@ -116,16 +117,20 @@
                     $new = $this->_releaseDir . DIRECTORY_SEPARATOR .
                         $release->getPackage() . '-' . $release->getVersion();
                     $gp = gzopen($archive, 'rb');
-                    $contents = '';
-                    while(!gzeof($gp)) {
-                        $contents .= gzread($gp, filesize($archive));
+                    if (!$gp) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotOpenRelease($archive);
                     }
-                    gzclose($gp);
                     $fp = fopen($new . '.tar', 'wb');
-                    fwrite($fp, $contents);
-                    fclose($fp);
-                    copy($release->getFilepath(), $new . '.tgz');
-                    unlink($release->getFilepath());
+                    if (!$fp) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotSaveRelease($new . '.tar');
+                    }
+                    stream_copy_to_stream($gp, $fp);
+                    if (!copy($release->getFilepath(), $new . '.tgz')) {
+                        throw new Chiara_PEAR_Server_ExceptionCannotSaveRelease($new . '.tgz');
+                    }
+                    if ($deleterelease) {
+                        unlink($release->getFilepath());
+                    }
                     // for the database, save the .tgz
                     $release->setFilepath($new . '.tgz');
                 } else {

PEAR_Server/Server
Exception.php 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- Exception.php	1 Jun 2005 03:31:47 -0000	1.10
+++ Exception.php	10 Feb 2006 16:27:06 -0000	1.11
@@ -278,4 +278,26 @@
         parent::__construct($msg ? $msg : $this->_message);
     }
 }
+
+class Chiara_PEAR_Server_CannotOpenRelease extends Chiara_PEAR_Server_Exception
+{
+    protected $_message = 'Uploaded release "%r" cannot be opened';
+
+    public function __construct($release, $msg = false)
+    {
+        $this->_data = array('r' => $release);
+        parent::__construct($msg ? $msg : $this->_message);
+    }
+}
+
+class Chiara_PEAR_Server_CannotSaveRelease extends Chiara_PEAR_Server_Exception
+{
+    protected $_message = 'Uploaded release "%r" cannot be saved';
+
+    public function __construct($release, $msg = false)
+    {
+        $this->_data = array('r' => $release);
+        parent::__construct($msg ? $msg : $this->_message);
+    }
+}
 ?>
\ No newline at end of file