ソースを参照

Merge pull request #1981 from orukusaki/closure-fix

Unbind the filter Closure from ArchivableFilesFinder to allow the object to be garbage collected
Jordi Boggiano 11 年 前
コミット
4fe074efdc
1 ファイル変更20 行追加13 行削除
  1. 20 13
      src/Composer/Package/Archiver/ArchivableFilesFinder.php

+ 20 - 13
src/Composer/Package/Archiver/ArchivableFilesFinder.php

@@ -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);