Skip non-empty directories in zip generation
Empty dirs get archived (leafs).
Previously it seemed ok to skip all directories in zip generation.
References:
- Ref: 6066359944
- Issue: #4865 Keep empty folders after re-zip a module
pull/5144/head
parent
b2b4603215
commit
8389b4b829
|
@ -13,7 +13,9 @@
|
||||||
namespace Composer\Package\Archiver;
|
namespace Composer\Package\Archiver;
|
||||||
|
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
use FilesystemIterator;
|
||||||
use Symfony\Component\Finder\Finder;
|
use Symfony\Component\Finder\Finder;
|
||||||
|
use Symfony\Component\Finder\SplFileInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Symfony Finder wrapper which locates files that should go into archives
|
* A Symfony Finder wrapper which locates files that should go into archives
|
||||||
|
@ -84,6 +86,14 @@ class ArchivableFilesFinder extends \FilterIterator
|
||||||
|
|
||||||
public function accept()
|
public function accept()
|
||||||
{
|
{
|
||||||
return !$this->getInnerIterator()->current()->isDir();
|
/** @var SplFileInfo $current */
|
||||||
|
$current = $this->getInnerIterator()->current();
|
||||||
|
|
||||||
|
if (!$current->isDir()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new FilesystemIterator($current, FilesystemIterator::SKIP_DOTS);
|
||||||
|
return !$iterator->valid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,11 @@ class ZipArchiver implements ArchiverInterface
|
||||||
/** @var $file \SplFileInfo */
|
/** @var $file \SplFileInfo */
|
||||||
$filepath = $file->getPath()."/".$file->getFilename();
|
$filepath = $file->getPath()."/".$file->getFilename();
|
||||||
$localname = str_replace($sources."/", '', $filepath);
|
$localname = str_replace($sources."/", '', $filepath);
|
||||||
$zip->addFile($filepath, $localname);
|
if ($file->isDir()) {
|
||||||
|
$zip->addEmptyDir($localname);
|
||||||
|
} else {
|
||||||
|
$zip->addFile($filepath, $localname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($zip->close()) {
|
if ($zip->close()) {
|
||||||
return $target;
|
return $target;
|
||||||
|
|
Loading…
Reference in New Issue