filter {.git,.hg.svn}
[pharext/pharext] / src / pharext / SourceDir / Basic.php
index 7decdc6781f764f29ea8b3548edb6d4c2631360b..414c2015765a884f7c993316aca569f97645692c 100644 (file)
@@ -7,6 +7,7 @@ use pharext\SourceDir;
 
 use FilesystemIterator;
 use IteratorAggregate;
+use RecursiveCallbackFilterIterator;
 use RecursiveDirectoryIterator;
 use RecursiveIteratorIterator;
 
@@ -33,14 +34,22 @@ class Basic implements IteratorAggregate, SourceDir
        
        public function setArgs(Args $args) {
        }
+
+       public function filter($current, $key, $iterator) {
+               $sub = $current->getSubPath();
+               if ($sub === ".git" || $sub === ".hg" || $sub === ".svn") {
+                       return false;
+               }
+               return true;
+       }
        
        public function getIterator() {
                $rdi = new RecursiveDirectoryIterator($this->path,
                                FilesystemIterator::CURRENT_AS_SELF | // needed for 5.5
                                FilesystemIterator::KEY_AS_PATHNAME |
                                FilesystemIterator::SKIP_DOTS);
-               $rii = new RecursiveIteratorIterator($rdi,
-                       RecursiveIteratorIterator::CHILD_FIRST);
+               $rci = new RecursiveCallbackFilterIterator($rdi, [$this, "filter"]);
+               $rii = new RecursiveIteratorIterator($rci);
                foreach ($rii as $path => $child) {
                        if (!$child->isDir()) {
                                yield $path;