#endif
PHAR_ARCHIVE_OBJECT();
- if (phar_obj->arc.archive->is_tar) {
- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
- "Cannot compress all files as Gzip, not possible with tar-based phar archives");
- return;
- }
if (PHAR_G(readonly)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Phar is readonly, cannot change compression");
"Cannot compress all files as Gzip, some are compressed as bzip2 and cannot be uncompressed");
return;
}
- pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_GZ TSRMLS_CC);
+ if (phar_obj->arc.archive->is_tar) {
+ phar_obj->arc.archive->flags &= ~PHAR_FILE_COMPRESSION_MASK;
+ phar_obj->arc.archive->flags |= PHAR_FILE_COMPRESSED_GZ;
+ } else {
+ pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_GZ TSRMLS_CC);
+ }
phar_obj->arc.archive->is_modified = 1;
phar_flush(phar_obj->arc.archive, 0, 0, &error TSRMLS_CC);
#endif
PHAR_ARCHIVE_OBJECT();
- if (phar_obj->arc.archive->is_tar) {
- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
- "Cannot compress all files as Bzip2, not possible with tar-based phar archives");
- return;
- }
if (phar_obj->arc.archive->is_zip) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC,
"Cannot compress all files as Bzip2, not possible with zip-based phar archives");
"Cannot compress all files as Bzip2, some are compressed as gzip and cannot be uncompressed");
return;
}
- pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_BZ2 TSRMLS_CC);
+ if (phar_obj->arc.archive->is_tar) {
+ phar_obj->arc.archive->flags &= ~PHAR_FILE_COMPRESSION_MASK;
+ phar_obj->arc.archive->flags |= PHAR_FILE_COMPRESSED_BZ2;
+ } else {
+ pharobj_set_compression(&phar_obj->arc.archive->manifest, PHAR_ENT_COMPRESSED_BZ2 TSRMLS_CC);
+ }
phar_obj->arc.archive->is_modified = 1;
phar_flush(phar_obj->arc.archive, 0, 0, &error TSRMLS_CC);
--- /dev/null
+--TEST--
+Phar: tar-based phar, make new bzipped tar
+--SKIPIF--
+<?php if (!extension_loaded('phar')) die('skip'); ?>
+<?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
+<?php if (!extension_loaded("bz2")) die("skip bz2 not available"); ?>
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+include dirname(__FILE__) . '/tarmaker.php.inc';
+$fname = dirname(__FILE__) . '/tar_makebz2.phar.tar';
+$pname = 'phar://' . $fname;
+$fname2 = dirname(__FILE__) . '/tar_makebz22.phar.tar';
+$pname2 = 'phar://' . $fname2;
+
+$a = new Phar($fname);
+$a['test'] = 'hi';
+var_dump($a->isTar());
+$a->compressAllFilesBZIP2();
+copy($fname, $fname2);
+$b = new Phar($fname2);
+var_dump($b->isTar());
+var_dump($b->isCompressed() == Phar::BZ2);
+?>
+===DONE===
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . '/tar_makebz2.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makebz22.phar.tar');
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+===DONE===
\ No newline at end of file
--- /dev/null
+--TEST--
+Phar: tar-based phar, make new gzipped tar
+--SKIPIF--
+<?php if (!extension_loaded('phar')) die('skip'); ?>
+<?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
+<?php if (!extension_loaded("zlib")) die("skip zlib not available"); ?>
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+include dirname(__FILE__) . '/tarmaker.php.inc';
+$fname = dirname(__FILE__) . '/tar_makegz.phar.tar';
+$pname = 'phar://' . $fname;
+$fname2 = dirname(__FILE__) . '/tar_makegz2.phar.tar';
+$pname2 = 'phar://' . $fname2;
+
+$a = new Phar($fname);
+$a['test'] = 'hi';
+var_dump($a->isTar());
+$a->compressAllFilesGZ();
+copy($fname, $fname2);
+$b = new Phar($fname2);
+var_dump($b->isTar());
+var_dump($b->isCompressed() == Phar::GZ);
+?>
+===DONE===
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . '/tar_makegz.phar.tar');
+@unlink(dirname(__FILE__) . '/tar_makegz2.phar.tar');
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+===DONE===
\ No newline at end of file