? .cache ? .git ? .project ? .settings ? empty ? file_30520_6.patch ? file_74645_1.patch ? file_74645_2.patch ? logs ? simpletest_304940.patch ? simpletest_install_4.patch ? modules/file ? sites/all/modules ? sites/default/files ? sites/default/settings.php Index: install.php =================================================================== RCS file: /cvs/drupal/drupal/install.php,v retrieving revision 1.141 diff -u -p -r1.141 install.php --- install.php 8 Nov 2008 22:04:03 -0000 1.141 +++ install.php 10 Nov 2008 00:31:07 -0000 @@ -410,7 +410,7 @@ function install_settings_form_submit($f * Find all .profile files. */ function install_find_profiles() { - return file_scan_directory('./profiles', '/\.profile$/', array('.', '..', 'CVS'), 0, TRUE, 'name', 0); + return file_scan_directory('./profiles', '/\.profile$/', '/(\.\.?|CVS)$/', 0, TRUE, 'name', 0); } /** @@ -496,7 +496,7 @@ function install_select_profile_form(&$f * Find all .po files for the current profile. */ function install_find_locales($profilename) { - $locales = file_scan_directory('./profiles/' . $profilename . '/translations', '/\.po$/', array('.', '..', 'CVS'), 0, FALSE); + $locales = file_scan_directory('./profiles/' . $profilename . '/translations', '/\.po$/', '/(\.\.?|CVS)$/', 0, FALSE); array_unshift($locales, (object) array('name' => 'en')); return $locales; } Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.822 diff -u -p -r1.822 common.inc --- includes/common.inc 8 Nov 2008 22:04:03 -0000 1.822 +++ includes/common.inc 10 Nov 2008 00:31:09 -0000 @@ -2074,7 +2074,7 @@ function _drupal_load_stylesheet($matche * Delete all cached CSS files. */ function drupal_clear_css_cache() { - file_scan_directory(file_create_path('css'), '/.*/', array('.', '..', 'CVS'), 'file_unmanaged_delete', TRUE); + file_scan_directory(file_create_path('css'), '/.*/', '/(\.\.?|CVS)$/', 'file_unmanaged_delete', TRUE); } /** @@ -2484,7 +2484,7 @@ function drupal_build_js_cache($files, $ * Delete all cached JS files. */ function drupal_clear_js_cache() { - file_scan_directory(file_create_path('js'), '/.*/', array('.', '..', 'CVS'), 'file_unmanaged_delete', TRUE); + file_scan_directory(file_create_path('js'), '/.*/', '/(\.\.?|CVS)$/', 'file_unmanaged_delete', TRUE); variable_set('javascript_parsed', array()); } @@ -2855,7 +2855,7 @@ function drupal_system_listing($mask, $d // Get current list of items foreach ($searchdir as $dir) { - $files = array_merge($files, file_scan_directory($dir, $mask, array('.', '..', 'CVS'), 0, TRUE, $key, $min_depth)); + $files = array_merge($files, file_scan_directory($dir, $mask, '/(\.\.?|CVS)$/', 0, TRUE, $key, $min_depth)); } return $files; Index: includes/file.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/file.inc,v retrieving revision 1.143 diff -u -p -r1.143 file.inc --- includes/file.inc 8 Nov 2008 22:04:03 -0000 1.143 +++ includes/file.inc 10 Nov 2008 00:31:09 -0000 @@ -1259,7 +1259,7 @@ function file_download() { * @param $mask * The preg_match() regular expression of the files to find. * @param $nomask - * An array of files/directories to ignore. + * The preg_match() regular expression of the files to ignore. * @param $callback * The callback function to call for each match. * @param $recurse @@ -1280,13 +1280,13 @@ function file_download() { * "path", "basename", and "name" members corresponding to the * matching files. */ -function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0) { +function file_scan_directory($dir, $mask, $nomask = '/(\.\.?|CVS)$/', $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0) { $key = (in_array($key, array('filename', 'basename', 'name')) ? $key : 'filename'); $files = array(); if (is_dir($dir) && $handle = opendir($dir)) { while (FALSE !== ($file = readdir($handle))) { - if (!in_array($file, $nomask) && $file[0] != '.') { + if (!preg_match($nomask, $file) && $file[0] != '.') { if (is_dir("$dir/$file") && $recurse) { // Give priority to files in this folder by merging them in after any subdirectory files. $files = array_merge(file_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse, $key, $min_depth, $depth + 1), $files); Index: includes/install.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/install.inc,v retrieving revision 1.74 diff -u -p -r1.74 install.inc --- includes/install.inc 24 Oct 2008 18:21:54 -0000 1.74 +++ includes/install.inc 10 Nov 2008 00:31:10 -0000 @@ -212,9 +212,9 @@ function drupal_detect_database_types() // Because we have no registry yet, we need to also include the install.inc // file for the driver explicitly. - foreach (file_scan_directory(DRUPAL_ROOT . '/includes/database', '/^[a-z]*$/i', array('.', '..', 'CVS'), 0, FALSE) as $file) { - include_once "{$file->filename}/install.inc"; - include_once "{$file->filename}/database.inc"; + foreach (file_scan_directory(DRUPAL_ROOT . '/includes/database', '/^[a-z]*$/i', '/(\.\.?|CVS)$/', 0, FALSE) as $file) { + include_once "{$file->filename}/install.inc"; + include_once "{$file->filename}/database.inc"; $drivers[$file->basename] = $file->filename; } Index: includes/locale.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/locale.inc,v retrieving revision 1.192 diff -u -p -r1.192 locale.inc --- includes/locale.inc 8 Nov 2008 22:04:03 -0000 1.192 +++ includes/locale.inc 10 Nov 2008 00:31:11 -0000 @@ -2485,7 +2485,7 @@ function locale_batch_by_language($langc // with names ending with $langcode.po. This allows for filenames // like node-module.de.po to let translators use small files and // be able to import in smaller chunks. - $files = array_merge($files, file_scan_directory(dirname($component->filename) . '/translations', '/(^|\.)' . $langcode . '\.po$/', array('.', '..', 'CVS'), 0, FALSE)); + $files = array_merge($files, file_scan_directory(dirname($component->filename) . '/translations', '/(^|\.)' . $langcode . '\.po$/', '/(\.\.?|CVS)$/', 0, FALSE)); $components[] = $component->name; } @@ -2517,7 +2517,7 @@ function locale_batch_by_component($comp // as $langcode.po or with names ending with $langcode.po. This allows // for filenames like node-module.de.po to let translators use small // files and be able to import in smaller chunks. - $files = array_merge($files, file_scan_directory(dirname($component->filename) . '/translations', '/(^|\.)(' . $language_list . ')\.po$/', array('.', '..', 'CVS'), 0, FALSE)); + $files = array_merge($files, file_scan_directory(dirname($component->filename) . '/translations', '/(^|\.)(' . $language_list . ')\.po$/', '/(\.\.?|CVS)$/', 0, FALSE)); } } return _locale_batch_build($files, $finished); Index: modules/simpletest/tests/file.test =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v retrieving revision 1.11 diff -u -p -r1.11 file.test --- modules/simpletest/tests/file.test 9 Nov 2008 05:38:50 -0000 1.11 +++ modules/simpletest/tests/file.test 10 Nov 2008 00:31:12 -0000 @@ -542,6 +542,38 @@ class FileDirectoryTest extends FileTest /** + * Tests the file_scan_directory() function. + */ +class FileScanDirectoryTest extends FileTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('File scan directory'), + 'description' => t('Tests the file_scan_directory() function.'), + 'group' => t('File'), + ); + } + + /** + * Check that the no-mask parameter is honored. + */ + function testNoMask() { + $path = $this->original_file_directory . '/simpletest'; + + // Grab a listing of all the JS files. + $all_files = file_scan_directory($path, '/javascript*/'); + $this->assertEqual(2, count($all_files), t('Found two, expected javascript files.')); + + // Now use the nomast parameter to filter out the .script file. + $filtered_files = file_scan_directory($path, '/javascript*/', '/.script$/'); + $this->assertEqual(1, count($filtered_files), t('Filtered correctly.')); + } +} + + +/** * Deletion related tests. */ class FileUnmanagedDeleteTest extends FileTestCase {