Merge remote-tracking branch 'hfcorriez/compressed_archiver'
commit
6eb50623e6
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue