]> granicus.if.org Git - php/commitdiff
Rename archive during compressAllFiles*()
authorSteph Fox <sfox@php.net>
Sun, 9 Mar 2008 04:46:16 +0000 (04:46 +0000)
committerSteph Fox <sfox@php.net>
Sun, 9 Mar 2008 04:46:16 +0000 (04:46 +0000)
Note: this only works for tar archives at present pending a fix for bug #13352

ext/phar/phar_internal.h
ext/phar/phar_object.c
ext/phar/tests/phar_oo_compressallbz2.phpt
ext/phar/tests/phar_oo_compressallgz.phpt
ext/phar/tests/phar_oo_getmodified.phpt
ext/phar/tests/phar_oo_uncompressall.phpt
ext/phar/tests/tar/tar_makebz2.phpt
ext/phar/tests/tar/tar_makegz.phpt
ext/phar/util.c

index 54203114ac4f8a91438c4c46fe665b30f8d5a2a8..0eac89ee35ef13a60be2dd363832e383318de1b4 100755 (executable)
@@ -376,7 +376,7 @@ char *phar_create_default_stub(const char *index_php, const char *web_index, siz
 char * phar_decompress_filter(phar_entry_info * entry, int return_unknown);
 char * phar_compress_filter(phar_entry_info * entry, int return_unknown);
 
-void phar_rename_archive(phar_archive_data *phar, char *ext TSRMLS_DC);
+void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC);
 int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, char *path, int path_len TSRMLS_DC);
 char *phar_find_in_include_path(char *file, char *entry, phar_archive_data *phar TSRMLS_DC);
 char *phar_fix_filepath(char *path, int *new_len, int use_cwd TSRMLS_DC);
index bc1aada5846d538783fdd57eaaf513e6af224728..c143e447f63e3790247c83bd0c97cb24904c2c34 100755 (executable)
@@ -1734,7 +1734,7 @@ static void phar_convert_to_other(phar_archive_data *source, int convert, char *
        source->is_temporary_alias = 0;
        source->flags = phar.flags;
 
-       phar_rename_archive(source, ext TSRMLS_CC);
+       phar_rename_archive(source, ext, 0 TSRMLS_CC);
        phar_flush(source, 0, 0, convert, &error TSRMLS_CC);
 }
 /* }}} */
@@ -2432,8 +2432,10 @@ PHP_METHOD(Phar, compressAllFilesGZ)
        } else {
                pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_GZ TSRMLS_CC);
        }
+
        phar_obj->arc.archive->is_modified = 1;
-       
+       phar_rename_archive(phar_obj->arc.archive, NULL, 1 TSRMLS_CC);
+
        phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
        if (error) {
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
@@ -2471,8 +2473,10 @@ PHP_METHOD(Phar, compressAllFilesBZIP2)
        } else {
                pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_BZ2 TSRMLS_CC);
        }
+
        phar_obj->arc.archive->is_modified = 1;
-       
+       phar_rename_archive(phar_obj->arc.archive, NULL, 1 TSRMLS_CC);
+
        phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
        if (error) {
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
@@ -2504,8 +2508,10 @@ PHP_METHOD(Phar, uncompressAllFiles)
        } else {
                pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_NONE TSRMLS_CC);
        }
+
        phar_obj->arc.archive->is_modified = 1;
-       
+       phar_rename_archive(phar_obj->arc.archive, NULL, 0 TSRMLS_CC);
+
        phar_flush(phar_obj->arc.archive, 0, 0, 0, &error TSRMLS_CC);
        if (error) {
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
index 40720ef174b770c64cc9c7a77c3c8be7cadac91f..7120f6411d90dd5076472a619d86035fd3644369 100644 (file)
@@ -44,7 +44,7 @@ var_dump($phar['b']->isCompressedBZIP2());
 ===DONE===
 --CLEAN--
 <?php 
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
 ?>
 --EXPECTF--
 string(1) "a"
index 4a67bf64ed916363e79c7c93e68e27ac6bf1b624..71274491f1718b55134e443fee37b2a2c0b5c81a 100644 (file)
@@ -44,7 +44,7 @@ var_dump($phar['b']->isCompressedBZIP2());
 ===DONE===
 --CLEAN--
 <?php 
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
 ?>
 --EXPECTF--
 string(1) "a"
index 33cfc08e9229672e4b039d66c3776e1f102d307a..c53729163176e1801992d5daefffca6eac716996 100644 (file)
@@ -27,7 +27,7 @@ var_dump($phar->getModified());
 ===DONE===
 --CLEAN--
 <?php 
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
 ?>
 --EXPECTF--
 bool(false)
index d2f2ca5420b97d7401b2ff6198a84c5b20ff0246..b447e96d021f598d71f82b9bcbc17c3a69c171ae 100644 (file)
@@ -52,7 +52,7 @@ var_dump($phar['a']->isCompressed());
 ===DONE===
 --CLEAN--
 <?php 
-unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
 ?>
 --EXPECTF--
 string(1) "a"
index 203265b385ae9cf63a802c75ef4c0f7d74f482bf..f72670f7a1d6696338e6214de726ab3edda69378 100644 (file)
@@ -10,18 +10,17 @@ phar.readonly=0
 <?php
 
 $fname = dirname(__FILE__) . '/tar_makebz2.phar.tar';
-$alias = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar';
-$alias2 = 'phar://' . $fname2;
+$fname2 = dirname(__FILE__) . '/tar_makebz2.phar.tar.bz2';
+$fname3 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar.bz2';
 
 $phar = new Phar($fname);
 $phar['test'] = 'hi';
 var_dump($phar->isTar());
 $phar->compressAllFilesBZIP2();
 
-copy($fname, $fname2);
+copy($fname2, $fname3);
 
-$phar2 = new Phar($fname2);
+$phar2 = new Phar($fname3);
 var_dump($phar2->isTar());
 var_dump($phar2->isCompressed() == Phar::BZ2);
 
@@ -29,11 +28,11 @@ var_dump($phar2->isCompressed() == Phar::BZ2);
 ===DONE===
 --CLEAN--
 <?php
-@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar');
-@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar.bz2');
+@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar.bz2');
 ?>
 --EXPECTF--
 bool(true)
 bool(true)
 bool(true)
-===DONE===
\ No newline at end of file
+===DONE===
index 280c51a762e5ec64131f06c0bd73ff6a514c3d2d..dada63de6872bf390f92567593d61ce0373493ba 100644 (file)
@@ -9,19 +9,18 @@ phar.readonly=0
 --FILE--
 <?php
 
-$fname = dirname(__FILE__) . '/tar_makegz.phar.tar';
-$alias = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/tar_makegz_b.phar.tar';
-$alias2 = 'phar://' . $fname2;
+$fname = dirname(__FILE__) . '/tar_makebz2.phar.tar';
+$fname2 = dirname(__FILE__) . '/tar_makebz2.phar.tar.gz';
+$fname3 = dirname(__FILE__) . '/tar_makebz2_b.phar.tar.gz';
 
 $phar = new Phar($fname);
 $phar['test'] = 'hi';
 var_dump($phar->isTar());
 $phar->compressAllFilesGZ();
 
-copy($fname, $fname2);
+copy($fname2, $fname3);
 
-$phar2 = new Phar($fname2);
+$phar2 = new Phar($fname3);
 var_dump($phar2->isTar());
 var_dump($phar2->isCompressed() == Phar::GZ);
 
@@ -29,8 +28,8 @@ var_dump($phar2->isCompressed() == Phar::GZ);
 ===DONE===
 --CLEAN--
 <?php
-@unlink(dirname(__FILE__) . '/tar_makegz.phar.tar');
-@unlink(dirname(__FILE__) . '/tar_makegz_b.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar.gz');
+@unlink(dirname(__FILE__) . '/tar_makebz2_b.phar.tar.gz');
 ?>
 --EXPECTF--
 bool(true)
index 5eee45b511e2bb15a2c36525ec15cfac7f5404f2..36e77184f11b7139beb5cb012b43da2fbd6cfe08 100644 (file)
@@ -72,12 +72,22 @@ int phar_seek_efp(phar_entry_info *entry, off_t offset, int whence, off_t positi
        return php_stream_seek(fp, temp, SEEK_SET);
 }
 
-void phar_rename_archive(phar_archive_data *phar, char *ext TSRMLS_DC)
+void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC)
 {
        char *oldname = NULL, *oldpath = NULL;
        char *basename = NULL, *basepath = NULL;
        char *newname = NULL, *newpath = NULL;
 
+       if (phar->flags && compress) {
+               char *error;
+       
+               phar_flush(phar, 0, 0, 0, &error TSRMLS_CC);
+               if (error) {
+                       zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
+                       efree(error);
+               }
+       }
+
        if (!ext) {
                if (phar->is_zip) {
                        if (phar->is_data) {