1818
1919#include " filelister.h"
2020#include " path.h"
21+ #include " pathmatch.h"
2122#include < cstring>
2223#include < string>
2324#include < sstream>
@@ -67,7 +68,7 @@ static BOOL MyFileExists(const std::string& path)
6768 return result;
6869}
6970
70- void FileLister::recursiveAddFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra)
71+ void FileLister::recursiveAddFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra, const PathMatch& ignored )
7172{
7273 const std::string cleanedPath = Path::toNativeSeparators (path);
7374
@@ -123,7 +124,7 @@ void FileLister::recursiveAddFiles(std::map<std::string, std::size_t> &files, co
123124 // File
124125 const std::string nativename = Path::fromNativeSeparators (fname);
125126
126- if (!checkAllFilesInDir || Path::acceptFile (fname, extra)) {
127+ if (( !checkAllFilesInDir || Path::acceptFile (fname, extra)) && !ignored. Match (fname )) {
127128 // Limitation: file sizes are assumed to fit in a 'size_t'
128129#ifdef _WIN64
129130 files[nativename] = (static_cast <std::size_t >(ffd.nFileSizeHigh ) << 32 ) | ffd.nFileSizeLow ;
@@ -133,7 +134,8 @@ void FileLister::recursiveAddFiles(std::map<std::string, std::size_t> &files, co
133134 }
134135 } else {
135136 // Directory
136- FileLister::recursiveAddFiles (files, fname, extra);
137+ if (!ignored.Match (fname))
138+ FileLister::recursiveAddFiles (files, fname, extra, ignored);
137139 }
138140 } while (FindNextFileA (hFind, &ffd) != FALSE );
139141
@@ -193,7 +195,8 @@ void FileLister::addFiles2(std::set<std::string> &seen_paths,
193195 std::map<std::string, std::size_t > &files,
194196 const std::string &path,
195197 const std::set<std::string> &extra,
196- bool recursive
198+ bool recursive,
199+ const PathMatch& ignored
197200 )
198201{
199202 std::ostringstream oss;
@@ -220,7 +223,7 @@ void FileLister::addFiles2(std::set<std::string> &seen_paths,
220223 if (filename[filename.length ()-1 ] != ' /' ) {
221224 // File
222225
223- if (Path::sameFileName (path,filename) || Path::acceptFile (filename, extra)) {
226+ if (( Path::sameFileName (path,filename) || Path::acceptFile (filename, extra)) && !ignored. Match (filename )) {
224227 seen_paths.insert (absolute_path);
225228
226229 struct stat sb;
@@ -232,25 +235,26 @@ void FileLister::addFiles2(std::set<std::string> &seen_paths,
232235 }
233236 } else if (recursive) {
234237 // Directory
235-
236- seen_paths.insert (absolute_path);
237- addFiles2 (seen_paths, files, filename, extra, recursive);
238+ if (!ignored.Match (filename)) {
239+ seen_paths.insert (absolute_path);
240+ addFiles2 (seen_paths, files, filename, extra, recursive, ignored);
241+ }
238242 }
239243 }
240244 globfree (&glob_results);
241245}
242246
243247
244- void FileLister::recursiveAddFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra)
248+ void FileLister::recursiveAddFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra, const PathMatch& ignored )
245249{
246250 std::set<std::string> seen_paths;
247- addFiles2 (seen_paths, files, path, extra, true );
251+ addFiles2 (seen_paths, files, path, extra, true , ignored );
248252}
249253
250- void FileLister::addFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra, bool recursive)
254+ void FileLister::addFiles (std::map<std::string, std::size_t > &files, const std::string &path, const std::set<std::string> &extra, bool recursive, const PathMatch& ignored )
251255{
252256 std::set<std::string> seen_paths;
253- addFiles2 (seen_paths, files, path, extra, recursive);
257+ addFiles2 (seen_paths, files, path, extra, recursive, ignored );
254258}
255259
256260bool FileLister::isDirectory (const std::string &path)
0 commit comments