1
0
Fork 0

Support compress tar.gz and tar.bz2 archiver

pull/2706/head
hfcorriez 2014-02-16 13:34:56 +08:00
parent 9896abeb38
commit c4a9b9b7d9
1 changed files with 33 additions and 2 deletions

View File

@ -22,6 +22,13 @@ class PharArchiver implements ArchiverInterface
protected static $formats = array( protected static $formats = array(
'zip' => \Phar::ZIP, 'zip' => \Phar::ZIP,
'tar' => \Phar::TAR, 'tar' => \Phar::TAR,
'tar.gz' => \Phar::TAR,
'tar.bz2' => \Phar::TAR
);
protected static $compressFormats = array(
'tar.gz' => \Phar::GZ,
'tar.bz2' => \Phar::BZ2
); );
/** /**
@ -37,10 +44,34 @@ class PharArchiver implements ArchiverInterface
} }
try { try {
$filename = substr($target, 0, strrpos($target, $format) - 1);
// Check if compress format
if (isset(static::$compressFormats[$format])) {
// Current compress format supported base on tar
$target = $filename . '.tar';
}
$phar = new \PharData($target, null, null, static::$formats[$format]); $phar = new \PharData($target, null, null, static::$formats[$format]);
$files = new ArchivableFilesFinder($sources, $excludes); $files = new ArchivableFilesFinder($sources, $excludes);
$phar->buildFromIterator($files, $sources); $phar->buildFromIterator($files, $sources);
if (isset(static::$compressFormats[$format])) {
// Check can be compressed?
if (!$phar->canCompress(static::$compressFormats[$format])) {
throw new \RuntimeException(sprintf('Can not compress to %s format', $format));
}
// Delete old tar
unlink($target);
// Compress the new tar
$phar->compress(static::$compressFormats[$format]);
// Make the correct filename
$target = $filename . '.' . $format;
}
return $target; return $target;
} catch (\UnexpectedValueException $e) { } catch (\UnexpectedValueException $e) {
$message = sprintf("Could not create archive '%s' from '%s': %s", $message = sprintf("Could not create archive '%s' from '%s': %s",