1
0
Fork 0

Unbind the filter Closure from ArchivableFilesFinder to allow the object

to be garbage collected correctly, and the folder closed.

Fixes https://github.com/composer/satis/issues/64 for PHP 5.4
pull/1981/head
Peter Smith 2013-06-07 17:11:56 +01:00
parent f4baa50a05
commit 8a7e2a3c00
1 changed files with 20 additions and 13 deletions

View File

@ -52,21 +52,28 @@ class ArchivableFilesFinder extends \FilterIterator
);
$this->finder = new Finder\Finder();
$filter = function (\SplFileInfo $file) use ($sources, $filters, $fs) {
$relativePath = preg_replace(
'#^'.preg_quote($sources, '#').'#',
'',
$fs->normalizePath($file->getRealPath())
);
$exclude = false;
foreach ($filters as $filter) {
$exclude = $filter->filter($relativePath, $exclude);
}
return !$exclude;
};
if (method_exists($filter, 'bindTo')) {
$filter = $filter->bindTo(null);
}
$this->finder
->in($sources)
->filter(function (\SplFileInfo $file) use ($sources, $filters, $fs) {
$relativePath = preg_replace(
'#^'.preg_quote($sources, '#').'#',
'',
$fs->normalizePath($file->getRealPath())
);
$exclude = false;
foreach ($filters as $filter) {
$exclude = $filter->filter($relativePath, $exclude);
}
return !$exclude;
})
->filter($filter)
->ignoreVCS(true)
->ignoreDotFiles(false);