-/**
- * Finds all files that match a given mask in a given directory.
- * Directories and files beginning with a period are excluded; this
- * prevents hidden files and directories (such as SVN working directories
- * and GIT repositories) from being scanned.
- *
- * @param $dir
- * The base directory for the scan, without trailing slash.
- * @param $mask
- * The regular expression of the files to find.
- * @param $nomask
- * An array of files/directories to ignore.
- * @param $callback
- * The callback function to call for each match.
- * @param $recurse_max_depth
- * When TRUE, the directory scan will recurse the entire tree
- * starting at the provided directory. When FALSE, only files
- * in the provided directory are returned. Integer values
- * limit the depth of the traversal, with zero being treated
- * identically to FALSE, and 1 limiting the traversal to the
- * provided directory and its immediate children only, and so on.
- * @param $key
- * The key to be used for the returned array of files. Possible
- * values are "filename", for the path starting with $dir,
- * "basename", for the basename of the file, and "name" for the name
- * of the file without an extension.
- * @param $min_depth
- * Minimum depth of directories to return files from.
- * @param $include_dot_files
- * If TRUE, files that begin with a '.' will be returned if they
- * match the provided mask. If FALSE, files that begin with a '.'
- * will not be returned, even if they match the provided mask.
- * @param $depth
- * Current depth of recursion. This parameter is only used internally and should not be passed.
- *
- * @return
- * An associative array (keyed on the provided key) of objects with
- * "path", "basename", and "name" members corresponding to the
- * matching files.
- */
-function drush_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse_max_depth = TRUE, $key = 'filename', $min_depth = 0, $include_dot_files = FALSE, $depth = 0) {
- $key = (in_array($key, array('filename', 'basename', 'name')) ? $key : 'filename');
- $files = array();
-
- // Exclude Bower and Node directories.
- $nomask = array_merge($nomask, array('node_modules', 'bower_components'));
-
- if (is_string($dir) && is_dir($dir) && $handle = opendir($dir)) {
- while (FALSE !== ($file = readdir($handle))) {
- if (!in_array($file, $nomask) && (($include_dot_files && (!preg_match("/\.\+/",$file))) || ($file[0] != '.'))) {
- if (is_dir("$dir/$file") && (($recurse_max_depth === TRUE) || ($depth < $recurse_max_depth))) {
- // Give priority to files in this folder by merging them in after any subdirectory files.
- $files = array_merge(drush_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse_max_depth, $key, $min_depth, $include_dot_files, $depth + 1), $files);
- }
- elseif ($depth >= $min_depth && preg_match($mask, $file)) {
- // Always use this match over anything already set in $files with the same $$key.
- $filename = "$dir/$file";
- $basename = basename($file);
- $name = substr($basename, 0, strrpos($basename, '.'));
- $files[$$key] = new stdClass();
- $files[$$key]->filename = $filename;
- $files[$$key]->basename = $basename;
- $files[$$key]->name = $name;
- if ($callback) {
- drush_op($callback, $filename);
- }
- }
- }
- }
-
- closedir($handle);
- }
-
- return $files;
-}
-
-/**
- * Simple helper function to append data to a given file.
- *
- * @param string $file
- * The full path to the file to append the data to.
- * @param string $data
- * The data to append.
- *
- * @return boolean
- * TRUE on success, FALSE in case of failure to open or write to the file.
- */
-function drush_file_append_data($file, $data) {
- if (!$fd = fopen($file, 'a+')) {
- drush_set_error(dt("ERROR: fopen(@file, 'ab') failed", array('@file' => $file)));
- return FALSE;
- }
- if (!fwrite($fd, $data)) {
- drush_set_error(dt("ERROR: fwrite(@file) failed", array('@file' => $file)) . '<pre>' . $data);
- return FALSE;
- }
- return TRUE;
-}
-