filter {.git,.hg.svn}
[pharext/pharext] / src / pharext / SourceDir / Basic.php
1 <?php
2
3 namespace pharext\SourceDir;
4
5 use pharext\Cli\Args;
6 use pharext\SourceDir;
7
8 use FilesystemIterator;
9 use IteratorAggregate;
10 use RecursiveCallbackFilterIterator;
11 use RecursiveDirectoryIterator;
12 use RecursiveIteratorIterator;
13
14
15 class Basic implements IteratorAggregate, SourceDir
16 {
17 private $path;
18
19 public function __construct($path) {
20 $this->path = $path;
21 }
22
23 public function getBaseDir() {
24 return $this->path;
25 }
26
27 public function getPackageInfo() {
28 return [];
29 }
30
31 public function getArgs() {
32 return [];
33 }
34
35 public function setArgs(Args $args) {
36 }
37
38 public function filter($current, $key, $iterator) {
39 $sub = $current->getSubPath();
40 if ($sub === ".git" || $sub === ".hg" || $sub === ".svn") {
41 return false;
42 }
43 return true;
44 }
45
46 public function getIterator() {
47 $rdi = new RecursiveDirectoryIterator($this->path,
48 FilesystemIterator::CURRENT_AS_SELF | // needed for 5.5
49 FilesystemIterator::KEY_AS_PATHNAME |
50 FilesystemIterator::SKIP_DOTS);
51 $rci = new RecursiveCallbackFilterIterator($rdi, [$this, "filter"]);
52 $rii = new RecursiveIteratorIterator($rci);
53 foreach ($rii as $path => $child) {
54 if (!$child->isDir()) {
55 yield $path;
56 }
57 }
58 }
59 }