diff --git a/src/Composer/Package/Archiver/ArchivableFilesFinder.php b/src/Composer/Package/Archiver/ArchivableFilesFinder.php index e4f5818b5..ab9604df5 100644 --- a/src/Composer/Package/Archiver/ArchivableFilesFinder.php +++ b/src/Composer/Package/Archiver/ArchivableFilesFinder.php @@ -25,7 +25,7 @@ use Symfony\Component\Finder; * * @author Nils Adermann */ -class ArchivableFilesFinder +class ArchivableFilesFinder extends \IteratorIterator { /** * @var Symfony\Component\Finder\Finder @@ -66,13 +66,24 @@ class ArchivableFilesFinder }) ->ignoreVCS(true) ->ignoreDotFiles(false); + + parent::__construct($this->finder->getIterator()); } - /** - * @return Symfony\Component\Finder\Finder - */ - public function getIterator() + public function next() { - return $this->finder->getIterator(); + do { + $this->getInnerIterator()->next(); + } while ($this->getInnerIterator()->valid() && $this->getInnerIterator()->current()->isDir()); + } + + public function current() + { + return $this->getInnerIterator()->current(); + } + + public function valid() + { + return $this->getInnerIterator()->valid(); } } diff --git a/src/Composer/Package/Archiver/PharArchiver.php b/src/Composer/Package/Archiver/PharArchiver.php index ef7e52fce..103f5bc23 100644 --- a/src/Composer/Package/Archiver/PharArchiver.php +++ b/src/Composer/Package/Archiver/PharArchiver.php @@ -37,7 +37,7 @@ class PharArchiver implements ArchiverInterface try { $phar = new \PharData($target, null, null, static::$formats[$format]); $files = new ArchivableFilesFinder($sources, $excludes); - $phar->buildFromIterator($files->getIterator(), $sources); + $phar->buildFromIterator($files, $sources); return $target; } catch (\UnexpectedValueException $e) { $message = sprintf("Could not create archive '%s' from '%s': %s", diff --git a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php b/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php index 49d3dd642..1e780414d 100644 --- a/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php +++ b/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php @@ -169,7 +169,7 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase protected function getArchivableFiles() { $files = array(); - foreach ($this->finder->getIterator() as $file) { + foreach ($this->finder as $file) { if (!$file->isDir()) { $files[] = preg_replace('#^'.preg_quote($this->sources, '#').'#', '', $file->getRealPath()); }