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:
@@ -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);
|
||||
|
||||
36
ext/phar/tests/tar/tar_makebz2.phpt
Normal file
36
ext/phar/tests/tar/tar_makebz2.phpt
Normal 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===
|
||||
36
ext/phar/tests/tar/tar_makegz.phpt
Normal file
36
ext/phar/tests/tar/tar_makegz.phpt
Normal 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===
|
||||
Reference in New Issue
Block a user