Description
I don't know if this is a bug or not. Perhaps it is, perhaps you can help me see how I should be handling this exception when I get it. If you think it is up to me to handle the exception, if you can give a concrete example of how I should handle it, that would be appreciated.
When searching for directories, if I hit a symbolic link that is bad, the search fails with
Error: ENOENT: no such file or directory, stat
Expected behaviour
Skips broken link, or does something more benign than throwing exception that I can't quite see how to handle, perhaps because there is something about working with Promises that I don't understand.
Actual behaviour
Throws exception
Here is what happens when I hit a broken Symbolic Link called NodeRouteBasics.
{ Error: ENOENT: no such file or directory, stat '/home/charlie/Git/isit320-2018/isit320-vincenzi-2018/aws-provision/server/NodeRouteBasics'
at Object.statSync (fs.js:848:3)
at File._getStatsSync (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/file-js/lib/file.js:50:28)
at File.isDirectorySync (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/file-js/lib/file.js:113:19)
at /media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/filehound/lib/filehound.js:723:18
at tryCatcher (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/util.js:16:23)
at MappingPromiseArray._promiseFulfilled (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/map.js:61:38)
at MappingPromiseArray.PromiseArray._iterate (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise_array.js:114:31)
at MappingPromiseArray.init (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise_array.js:78:10)
at Promise._settlePromise (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:566:21)
at Promise._settlePromise0 (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:694:18)
at Promise._fulfill (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:638:18)
at Promise._resolveCallback (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:432:57)
at Promise._settlePromiseFromHandler (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:524:17)
at Promise._settlePromise (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/media/charlie/elfdisk/Git/isit320-calvert-2018/aws-provision/node_modules/bluebird/js/release/promise.js:614:10)
errno: -2,
syscall: 'stat',
code: 'ENOENT',
path:
'/home/charlie/Git/isit320-2018/isit320-vincenzi-2018/aws-provision/server/NodeRouteBasics' }
Steps to reproduce
Here is my code:
`const filehound = FileHound.create();
filehound
.path(searchDir)
.depth(1)
.discard(["node_modules", "bower_components", "build", ".idea", "static", ".git"])
.directory()
.find((err, dirs) => {
if (err) {
console.log(err);
}
if (!dirs) {
console.log('SEARCHDIR'.red, searchDir);
return;
} else {
console.log('SEARCHDIR'.blue, searchDir);
}`
When I hit the broken link err is valid and !dirs is true.
Operating system
Linux Ubuntu 18.04