From c4a9b9b7d99b9afacef87f9daa3e0bff7f226056 Mon Sep 17 00:00:00 2001 From: hfcorriez Date: Sun, 16 Feb 2014 13:34:56 +0800 Subject: [PATCH] Support compress tar.gz and tar.bz2 archiver --- .../Package/Archiver/PharArchiver.php | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Composer/Package/Archiver/PharArchiver.php b/src/Composer/Package/Archiver/PharArchiver.php index 75b9843f3..acd1c3b61 100644 --- a/src/Composer/Package/Archiver/PharArchiver.php +++ b/src/Composer/Package/Archiver/PharArchiver.php @@ -20,8 +20,15 @@ namespace Composer\Package\Archiver; class PharArchiver implements ArchiverInterface { protected static $formats = array( - 'zip' => \Phar::ZIP, - 'tar' => \Phar::TAR, + 'zip' => \Phar::ZIP, + '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 { + $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]); $files = new ArchivableFilesFinder($sources, $excludes); $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; } catch (\UnexpectedValueException $e) { $message = sprintf("Could not create archive '%s' from '%s': %s",