summaryrefslogtreecommitdiffstats
path: root/lib/models
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-05-12 16:10:11 +0200
committerSamy Pessé <samypesse@gmail.com>2016-05-12 16:10:11 +0200
commitc8c2a61f966a5f99e41bfc316fe91141536f1483 (patch)
treee05bdf6915b5090d8fd492c6f137d170f717ad3a /lib/models
parent08d780d1f63a96ee26386d92e38f3b764ccda37e (diff)
downloadgitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.zip
gitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.tar.gz
gitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.tar.bz2
Fix #1289: add option to filter files when listing using fs.listAllFiles
Diffstat (limited to 'lib/models')
-rw-r--r--lib/models/fs.js18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/models/fs.js b/lib/models/fs.js
index 12aee53..20c13ef 100644
--- a/lib/models/fs.js
+++ b/lib/models/fs.js
@@ -198,23 +198,29 @@ FS.prototype.listFiles = function(dirname) {
/**
List all files in a directory
- @param {String} dirname
+ @param {String} dirName
+ @param {Function(dirName)} filterFn: call it for each file/directory to test if it should stop iterating
@return {Promise<List<String>>}
*/
-FS.prototype.listAllFiles = function(folder) {
+FS.prototype.listAllFiles = function(dirName, filterFn) {
var that = this;
- folder = folder || '.';
+ dirName = dirName || '.';
- return this.readDir(folder)
+ return this.readDir(dirName)
.then(function(files) {
return Promise.reduce(files, function(out, file) {
var isDirectory = pathIsFolder(file);
+ var newDirName = path.join(dirName, file);
+
+ if (filterFn && filterFn(newDirName) === false) {
+ return out;
+ }
if (!isDirectory) {
- return out.push(path.join(folder, file));
+ return out.push(newDirName);
}
- return that.listAllFiles(path.join(folder, file))
+ return that.listAllFiles(newDirName, filterFn)
.then(function(inner) {
return out.concat(inner);
});