Re: cvs: php4 /pear/Archive Tar.php

From: Date: Thu, 09 May 2002 13:48:24 +0000
Subject: Re: cvs: php4 /pear/Archive Tar.php
References: 1 2  Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-3759@lists.php.net to get a copy of this message
Stig, I will do more windows testing, with this path format which is not very easy to handle. I do modify the doc in order to explain what is now supported, but it will need more testing. I will then commit a new package version (in some days I hope) let say 0.4. Is there a 'standard' testing .php file I can use or a good practice I can copy from ? My testing file today is ... ugly. Vincent ----- Original Message ----- From: "Stig S. Bakken" <ssb@fast.no> To: "Vincent Blavet" <vincent@blavet.net> Cc: <pear-cvs@lists.php.net> Sent: Thursday, May 09, 2002 3:15 PM Subject: Re: [PEAR-CVS] cvs: php4 /pear/Archive Tar.php > Hi Vincent, > > Will you do a proper 0.4 or maybe even 0.9 release from this? With some > extra Windows testing I think Archive_Tar is pretty close to 1.0/stable. > > - Stig > > On Thu, 2002-05-09 at 15:00, Vincent Blavet wrote: > > vblavet Thu May 9 09:00:12 2002 EDT > > > > Modified files: > > /php4/pear/Archive Tar.php > > Log: > > * Better handling of Windows paths (\php\any_thing or c:\php\any_thing) > > * Remember that inside the archive path are all the time in unix format /php/any_thing > > * When necessary, '\' are replaced by '/' and 'c:' are > > removed > > * Synchro with cvs:pear/Archive_Tar/Tar.php version 1.20 > > > > Index: php4/pear/Archive/Tar.php > > diff -u php4/pear/Archive/Tar.php:1.7 php4/pear/Archive/Tar.php:1.8 > > --- php4/pear/Archive/Tar.php:1.7 Sat Apr 13 01:33:35 2002 > > +++ php4/pear/Archive/Tar.php Thu May 9 09:00:12 2002 > > @@ -16,7 +16,7 @@ > > // | Author: Vincent Blavet <vincent@blavet.net> | > > // +----------------------------------------------------------------------+ > > // > > -// $Id: Tar.php,v 1.7 2002/04/13 05:33:35 mfischer Exp $ > > +// $Id: Tar.php,v 1.8 2002/05/09 13:00:12 vblavet Exp $ > > > > require_once 'PEAR.php'; > > > > @@ -24,7 +24,7 @@ > > * Creates a (compressed) Tar archive > > * > > * @author Vincent Blavet <vincent@blavet.net> > > -* @version $Revision: 1.7 $ > > +* @version $Revision: 1.8 $ > > * @package Archive > > */ > > class Archive_Tar extends PEAR > > @@ -540,6 +540,10 @@ > > $v_result=true; > > $v_header = array(); > > > > + // ----- Remove potential windows directory separator > > + $p_add_dir = $this->_translateWinPath($p_add_dir); > > + $p_remove_dir = $this->_translateWinPath($p_remove_dir, false); > > + > > if (!$this->_file) { > > $this->_error('Invalid file descriptor'); > > return false; > > @@ -576,7 +580,7 @@ > > $p_hitem = readdir($p_hdir); // '..' directory > > while ($p_hitem = readdir($p_hdir)) { > > if ($v_filename != ".") > > - $p_temp_list[0] = $v_filename.DIRECTORY_SEPARATOR.$p_hitem; > > + $p_temp_list[0] = $v_filename.'/'.$p_hitem; > > else > > $p_temp_list[0] = $p_hitem; > > > > @@ -607,24 +611,28 @@ > > } > > > > // ----- Calculate the stored filename > > + $p_filename = $this->_translateWinPath($p_filename, false);; > > $v_stored_filename = $p_filename; > > if (strcmp($p_filename, $p_remove_dir) == 0) { > > return true; > > } > > if ($p_remove_dir != '') { > > - if (substr($p_remove_dir, -1) != DIRECTORY_SEPARATOR) > > - $p_remove_dir .= DIRECTORY_SEPARATOR; > > + if (substr($p_remove_dir, -1) != '/') > > + $p_remove_dir .= '/'; > > > > if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) > > $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); > > } > > + $v_stored_filename = $this->_translateWinPath($v_stored_filename); > > if ($p_add_dir != '') { > > - if (substr($p_add_dir, -1) == DIRECTORY_SEPARATOR) > > + if (substr($p_add_dir, -1) == '/') > > $v_stored_filename = $p_add_dir.$v_stored_filename; > > else > > - $v_stored_filename = $p_add_dir.DIRECTORY_SEPARATOR.$v_stored_filename; > > + $v_stored_filename = $p_add_dir.'/'.$v_stored_filename; > > } > > > > + $v_stored_filename = $this->_pathReduction($v_stored_filename); > > + > > if (strlen($v_stored_filename) > 99) { > > $this->_warning("Stored file name is too long (max. 99) : '$v_stored_filename'"); > > fclose($v_file); > > @@ -811,18 +819,15 @@ > > $v_extract_all = true; > > $v_listing = false; > > > > - // ----- Look for removing the WINDOW '\' > > - if (OS_WINDOWS && strpos($p_path, '\\')) { > > - str_replace('\\', DIRECTORY_SEPARATOR, $p_path); > > - } > > - > > - if ($p_path == '' || (substr($p_path, 0, 1) != DIRECTORY_SEPARATOR && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { > > + $p_path = $this->_translateWinPath($p_path, false); > > + if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { > > $p_path = "./".$p_path; > > } > > + $p_remove_path = $this->_translateWinPath($p_remove_path); > > > > // ----- Look for path to remove format (should end by /) > > - if (($p_remove_path != '') && (substr($p_remove_path, -1) != DIRECTORY_SEPARATOR)) > > - $p_remove_path .= DIRECTORY_SEPARATOR; > > + if (($p_remove_path != '') && (substr($p_remove_path, -1) != > > '/')) > > + $p_remove_path .= '/'; > > $p_remove_path_size = strlen($p_remove_path); > > > > switch ($p_mode) { > > @@ -867,7 +872,7 @@ > > > > for ($i=0; $i<sizeof($p_file_list); $i++) { > > // ----- Look if it is a directory > > - if (substr($p_file_list[$i], -1) == DIRECTORY_SEPARATOR) { > > + if (substr($p_file_list[$i], -1) == '/') { > > // ----- Look if the directory is in the filename path > > if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) { > > $v_extract_file = TRUE; > > @@ -891,14 +896,14 @@ > > if (($p_remove_path != '') > > && (substr($v_header['filename'], 0, $p_remove_path_size) == $p_remove_path)) > > $v_header['filename'] = substr($v_header['filename'], $p_remove_path_size); > > - if (($p_path != "./") && ($p_path != DIRECTORY_SEPARATOR)) { > > - while (substr($p_path, -1) == DIRECTORY_SEPARATOR) > > + if (($p_path != './') && ($p_path != '/')) { > > + while (substr($p_path, -1) == '/') > > $p_path = substr($p_path, 0, strlen($p_path)-1); > > > > - if (substr($v_header['filename'], 0, 1) == DIRECTORY_SEPARATOR) > > + if (substr($v_header['filename'], 0, 1) == '/') > > $v_header['filename'] = $p_path.$v_header['filename']; > > else > > - $v_header['filename'] = $p_path.DIRECTORY_SEPARATOR.$v_header['filename']; > > + $v_header['filename'] = > > $p_path.'/'.$v_header['filename']; > > } > > if (file_exists($v_header['filename'])) { > > if ((@is_dir($v_header['filename'])) && ($v_header['typeflag'] == '')) { > > @@ -992,8 +997,8 @@ > > // ----- Log extracted files > > if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename']) > > $v_file_dir = ''; > > - if ((substr($v_header['filename'], 0, 1) == DIRECTORY_SEPARATOR) && ($v_file_dir == '')) > > - $v_file_dir = DIRECTORY_SEPARATOR; > > + if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) > > + $v_file_dir = '/'; > > > > $p_list_detail[$v_nb++] = $v_header; > > } > > @@ -1097,7 +1102,7 @@ > > // ----- Look for not empty path > > if ($p_dir != '') { > > // ----- Explode path by directory names > > - $v_list = explode(DIRECTORY_SEPARATOR, $p_dir); > > + $v_list = explode('/', $p_dir); > > > > // ----- Study directories from last to first > > for ($i=sizeof($v_list)-1; $i>=0; $i--) { > > @@ -1112,16 +1117,33 @@ > > } > > else if (($v_list[$i] == '') && ($i!=(sizeof($v_list)-1)) && ($i!=0)) { > > // ----- Ignore only the double '//' in path, > > - // but not the first and last DIRECTORY_SEPARATOR > > + // but not the first and last / > > } else { > > - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?DIRECTORY_SEPARATOR.$v_result:''); > > + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'.$v_result:''); > > } > > } > > } > > - $v_result = strtr($v_result, '\\', DIRECTORY_SEPARATOR); > > + $v_result = strtr($v_result, '\\', '/'); > > return $v_result; > > } > > // }}} > > > > + // {{{ _translateWinPath() > > + function _translateWinPath($p_path, $p_remove_disk_letter=true) > > + { > > + if (OS_WINDOWS) { > > + // ----- Look for potential disk letter > > + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { > > + $p_path = substr($p_path, $v_position+1); > > + } > > + // ----- Change potential windows directory separator > > + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { > > + $p_path = strtr($p_path, '\\', '/'); > > + } > > + } > > + return $p_path; > > + } > > + // }}} > > + > > } > > -?> > > +?> > > \ No newline at end of file > > > > > > > > -- > > PEAR CVS Mailing List (http://pear.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- > PEAR CVS Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >

« previous php.pear.cvs (#3759) next »