Skip to content

Commit

Permalink
Rename to getDirRegexStats() and enhance. See: wpsharks/comet-cache#83
Browse files Browse the repository at this point in the history
  • Loading branch information
jaswsinc committed Aug 7, 2015
1 parent 027b05a commit 8b6cdc7
Showing 1 changed file with 22 additions and 20 deletions.
42 changes: 22 additions & 20 deletions src/includes/closures/Shared/FsUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,42 +126,43 @@
};

/*
* Recursive directory iterator based on a regex pattern.
* Recursive directory iterator.
*
* @since 150422 Rewrite.
* @since 15xxxx Adding a few statistics.
*
* @param string $dir An absolute server directory path.
* @param string $regex A regex pattern; compares to each full file path.
*
* @return \RegexIterator Navigable with {@link \foreach()}; where each item
* is a {@link \RecursiveDirectoryIterator}.
*/
$self->dirRegexIteration = function ($dir, $regex) use ($self) {
$dir = (string) $dir;
$regex = (string) $regex;

$dir_iterator = new \RecursiveDirectoryIterator($dir, \FilesystemIterator::KEY_AS_PATHNAME | \FilesystemIterator::CURRENT_AS_SELF | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS);
$iterator_iterator = new \RecursiveIteratorIterator($dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST);
$regex_iterator = new \RegexIterator($iterator_iterator, $regex, \RegexIterator::MATCH, \RegexIterator::USE_KEY);
$self->dirIteration = function ($dir) use ($self) {
$dir = (string) $dir;

return $regex_iterator;
$dir_iterator = new \RecursiveDirectoryIterator($dir, \FilesystemIterator::KEY_AS_PATHNAME | \FilesystemIterator::CURRENT_AS_SELF | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS);
return new \RecursiveIteratorIterator($dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST);
};

/*
* Recursive directory iterator.
* Recursive directory iterator based on a regex pattern.
*
* @since 15xxxx Adding a few statistics.
* @since 150422 Rewrite.
*
* @param string $dir An absolute server directory path.
* @param string $regex A regex pattern; compares to each full file path.
*
* @return \RegexIterator Navigable with {@link \foreach()}; where each item
* is a {@link \RecursiveDirectoryIterator}.
*/
$self->dirIteration = function ($dir) use ($self) {
$dir = (string) $dir;
$self->dirRegexIteration = function ($dir, $regex = '/.+/') use ($self) {
$dir = (string) $dir;
$regex = (string) $regex;
$regex = !$regex ? '/.+/' : $regex;

$dir_iterator = new \RecursiveDirectoryIterator($dir, \FilesystemIterator::KEY_AS_PATHNAME | \FilesystemIterator::CURRENT_AS_SELF | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS);
return new \RecursiveIteratorIterator($dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST);
$dir_iterator = new \RecursiveDirectoryIterator($dir, \FilesystemIterator::KEY_AS_PATHNAME | \FilesystemIterator::CURRENT_AS_SELF | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS);
$iterator_iterator = new \RecursiveIteratorIterator($dir_iterator, \RecursiveIteratorIterator::CHILD_FIRST);
$regex_iterator = new \RegexIterator($iterator_iterator, $regex, \RegexIterator::MATCH, \RegexIterator::USE_KEY);

return $regex_iterator;
};

/*
Expand All @@ -170,12 +171,13 @@
* @since 15xxxx Adding a few statistics.
*
* @param string $dir An absolute server directory path.
* @param string $regex A regex pattern; compares to each full file path.
* @param boolean $reconsider Bypass cached statistics?
*
* @return \stdClass `total_size`, `total_links`, `total_files`, `total_dirs`.
*/
$self->getDirStats = function ($dir, $reconsider = false) use ($self) {
if (!is_null($stats = &$self->staticKey('getDirStats', $dir)) && !$reconsider) {
$self->getDirRegexStats = function ($dir, $regex = '/.+/', $reconsider = false) use ($self) {
if (!is_null($stats = &$self->staticKey('getDirStats', array($dir, $regex))) && !$reconsider) {
return $stats; // Already cached this.
}
$stats = (object) array(
Expand All @@ -189,7 +191,7 @@
if (!is_dir($dir = (string) $dir)) {
return $stats; // Not possible.
}
foreach ($self->dirIteration($dir) as $_resource) {
foreach ($self->dirRegexIteration($dir, $regex) as $_resource) {
switch ($_resource->getType()) { // `link`, `file`, `dir`.

case 'link': // Symbolic links.
Expand Down

0 comments on commit 8b6cdc7

Please sign in to comment.