Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2080)

Unified Diff: base/files/file_enumerator.h

Issue 2892173003: Add recursive pattern matching for subfolders in file_enumerator. (Closed)
Patch Set: Add recursive pattern matching for subfolders in file_enumerator Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/BUILD.gn ('k') | base/files/file_enumerator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/files/file_enumerator.h
diff --git a/base/files/file_enumerator.h b/base/files/file_enumerator.h
index 7cac8dd9d457f86366ea54adc1688d36f9121ed9..4f3ee57a8c555c70fac5d6e2bde900137ba9101e 100644
--- a/base/files/file_enumerator.h
+++ b/base/files/file_enumerator.h
@@ -84,6 +84,17 @@ class BASE_EXPORT FileEnumerator {
#endif
};
+ // Search policy for intermediate folders.
+ enum class FolderSearchPolicy {
+ // Recursive search will pass through folders whose names match the
+ // pattern. Inside each one, all files will be returned. Folders with names
+ // that do not match the pattern will be ignored within their interior.
+ MATCH_ONLY,
+ // Recursive search will pass through every folder and perform pattern
+ // matching inside each one.
+ ALL,
+ };
+
// |root_path| is the starting directory to search for. It may or may not end
// in a slash.
//
@@ -101,9 +112,6 @@ class BASE_EXPORT FileEnumerator {
// since the underlying code uses OS-specific matching routines. In general,
// Windows matching is less featureful than others, so test there first.
// If unspecified, this will match all files.
- // NOTE: the pattern only matches the contents of root_path, not files in
- // recursive subdirectories.
- // TODO(erikkay): Fix the pattern matching to work at all levels.
FileEnumerator(const FilePath& root_path,
bool recursive,
int file_type);
@@ -111,6 +119,11 @@ class BASE_EXPORT FileEnumerator {
bool recursive,
int file_type,
const FilePath::StringType& pattern);
+ FileEnumerator(const FilePath& root_path,
+ bool recursive,
+ int file_type,
+ const FilePath::StringType& pattern,
+ FolderSearchPolicy folder_search_policy);
~FileEnumerator();
// Returns the next file or an empty string if there are no more results.
@@ -127,28 +140,27 @@ class BASE_EXPORT FileEnumerator {
// Returns true if the given path should be skipped in enumeration.
bool ShouldSkip(const FilePath& path);
+ bool IsTypeMatched(bool is_dir) const;
+
+ bool IsPatternMatched(const FilePath& src) const;
+
#if defined(OS_WIN)
// True when find_data_ is valid.
- bool has_find_data_;
+ bool has_find_data_ = false;
WIN32_FIND_DATA find_data_;
- HANDLE find_handle_;
+ HANDLE find_handle_ = INVALID_HANDLE_VALUE;
#elif defined(OS_POSIX)
-
- // Read the filenames in source into the vector of DirectoryEntryInfo's
- static bool ReadDirectory(std::vector<FileInfo>* entries,
- const FilePath& source, bool show_links);
-
// The files in the current directory
std::vector<FileInfo> directory_entries_;
// The next entry to use from the directory_entries_ vector
size_t current_directory_entry_;
#endif
-
FilePath root_path_;
- bool recursive_;
- int file_type_;
- FilePath::StringType pattern_; // Empty when we want to find everything.
+ const bool recursive_;
+ const int file_type_;
+ FilePath::StringType pattern_;
+ const FolderSearchPolicy folder_search_policy_;
// A stack that keeps track of which subdirectories we still need to
// enumerate in the breadth-first search.
« no previous file with comments | « base/BUILD.gn ('k') | base/files/file_enumerator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698