/**
  * {@inheritdoc}
  */
 public function searchInDirectory($dir)
 {
     // having "/../" in path make find fail
     $dir = realpath($dir);
     // searching directories containing or not containing strings leads to no result
     if (ehough_finder_iterator_FileTypeFilterIterator::ONLY_DIRECTORIES === $this->mode && ($this->contains || $this->notContains)) {
         return new ehough_finder_iterator_FilePathsIterator(array(), $dir);
     }
     $command = ehough_finder_shell_Command::create();
     $find = $this->buildFindCommand($command, $dir);
     if ($this->followLinks) {
         $find->add('-follow');
     }
     $find->add('-mindepth')->add($this->minDepth + 1);
     if (PHP_INT_MAX !== $this->maxDepth) {
         $find->add('-maxdepth')->add($this->maxDepth + 1);
     }
     if (ehough_finder_iterator_FileTypeFilterIterator::ONLY_DIRECTORIES === $this->mode) {
         $find->add('-type d');
     } elseif (ehough_finder_iterator_FileTypeFilterIterator::ONLY_FILES === $this->mode) {
         $find->add('-type f');
     }
     $this->buildNamesFiltering($find, $this->names);
     $this->buildNamesFiltering($find, $this->notNames, true);
     $this->buildPathsFiltering($find, $dir, $this->paths);
     $this->buildPathsFiltering($find, $dir, $this->notPaths, true);
     $this->buildSizesFiltering($find, $this->sizes);
     $this->buildDatesFiltering($find, $this->dates);
     $useGrep = $this->shell->testCommand('grep') && $this->shell->testCommand('xargs');
     $useSort = is_int($this->sort) && $this->shell->testCommand('sort') && $this->shell->testCommand('cut');
     if ($useGrep && ($this->contains || $this->notContains)) {
         $grep = $command->ins('grep');
         $this->buildContentFiltering($grep, $this->contains);
         $this->buildContentFiltering($grep, $this->notContains, true);
     }
     if ($useSort) {
         $this->buildSorting($command, $this->sort);
     }
     $command->setErrorHandler(array($this, 'callbackAccessDeniedThrower'));
     $paths = $this->shell->testCommand('uniq') ? $command->add('| uniq')->execute() : array_unique($command->execute());
     $iterator = new ehough_finder_iterator_FilePathsIterator($paths, $dir);
     if ($this->exclude) {
         $iterator = new ehough_finder_iterator_ExcludeDirectoryFilterIterator($iterator, $this->exclude);
     }
     if (!$useGrep && ($this->contains || $this->notContains)) {
         $iterator = new ehough_finder_iterator_FilecontentFilterIterator($iterator, $this->contains, $this->notContains);
     }
     if ($this->filters) {
         $iterator = new ehough_finder_iterator_CustomFilterIterator($iterator, $this->filters);
     }
     if (!$useSort && $this->sort) {
         $iteratorAggregate = new ehough_finder_iterator_SortableIterator($iterator, $this->sort);
         $iterator = $iteratorAggregate->getIterator();
     }
     return $iterator;
 }
Exemplo n.º 2
0
 public function testCastToString()
 {
     $cmd = ehough_finder_shell_Command::create();
     $cmd->add('--force');
     $cmd->add('--run');
     $this->assertSame('--force --run', (string) $cmd);
 }