diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-12 16:10:11 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-12 16:10:11 +0200 |
commit | c8c2a61f966a5f99e41bfc316fe91141536f1483 (patch) | |
tree | e05bdf6915b5090d8fd492c6f137d170f717ad3a | |
parent | 08d780d1f63a96ee26386d92e38f3b764ccda37e (diff) | |
download | gitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.zip gitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.tar.gz gitbook-c8c2a61f966a5f99e41bfc316fe91141536f1483.tar.bz2 |
Fix #1289: add option to filter files when listing using fs.listAllFiles
-rw-r--r-- | lib/models/fs.js | 18 | ||||
-rw-r--r-- | lib/parse/listAssets.js | 25 |
2 files changed, 24 insertions, 19 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); }); diff --git a/lib/parse/listAssets.js b/lib/parse/listAssets.js index b2e141c..d83d8fd 100644 --- a/lib/parse/listAssets.js +++ b/lib/parse/listAssets.js @@ -23,21 +23,20 @@ function listAssets(book, pages) { var config = book.getConfig(); var configFile = config.getFile().getPath(); + function filterFile(file) { + return !( + file === summaryFile || + file === glossaryFile || + file === langsFile || + file === configFile || + book.isContentFileIgnored(file) || + pages.has(file) + ); + } + return timing.measure( 'parse.listAssets', - fs.listAllFiles() - .then(function(files) { - return files.filterNot(function(file) { - return ( - file === summaryFile || - file === glossaryFile || - file === langsFile || - file === configFile || - book.isContentFileIgnored(file) || - pages.has(file) - ); - }); - }) + fs.listAllFiles('.', filterFile) ); } |