shama / gaze

:crystal_ball: A globbing fs.watch wrapper built from the best parts of other fine watch libs.
MIT License
1.16k stars 167 forks source link

fs.lstatSync doesn't handle specific Windows REPARSE POINTS #239

Open paulbouwer opened 7 years ago

paulbouwer commented 7 years ago

Referenced issues:

Issue

After experiencing the following issue in hyper which uses gaze, I noticed that all sub-folders in my HOME were being scanned instead of just the HOME/.hyper.js file that hyper had configured gaze to watch.

image

It also appears that in my case, the OneDrive folder has a specific type of reparse point that fs.lstatSync cannot handle. I ran a simple app against my home folder and fs.lstatSync will handle all other junctions in my HOME, just not the folders added by OneDrive.

Would it make sense to alter:

gaze.js - line 301-303

301      if (fs.lstatSync(dirfile).isDirectory()) {
302        helper.objectPush(this._watched, dirname, dirfile + path.sep);
303      }

to the following:

301      try {
302        if (fs.lstatSync(dirfile).isDirectory()) {
303          helper.objectPush(this._watched, dirname, dirfile + path.sep);
304        }
305      } catch (e) { }

or only catch the error if e.code === "EINVAL". At least until this can be resolved upstream in the node repo for fs.lstatSync.