1
0
mirror of https://github.com/php/php-src.git synced 2026-03-28 18:22:42 +01:00

add support for creation of gzipped and bzipped tar-based phars

This commit is contained in:
Greg Beaver
2008-01-15 23:41:44 +00:00
parent 3ad150905d
commit cb40b39b5b
3 changed files with 84 additions and 12 deletions

View File

@@ -1708,11 +1708,6 @@ PHP_METHOD(Phar, compressAllFilesGZ)
#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");
@@ -1729,7 +1724,12 @@ PHP_METHOD(Phar, compressAllFilesGZ)
"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);
@@ -1754,11 +1754,6 @@ PHP_METHOD(Phar, compressAllFilesBZIP2)
#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");
@@ -1781,7 +1776,12 @@ PHP_METHOD(Phar, compressAllFilesBZIP2)
"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);

View File

@@ -0,0 +1,36 @@
--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===

View File

@@ -0,0 +1,36 @@
--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===