@@ -106,7 +106,6 @@ class DirectoryWatcher extends EventEmitter {
106
106
}
107
107
}
108
108
} ;
109
- this . watcher . on ( "change" , this . onWatchEvent . bind ( this ) ) ;
110
109
} else {
111
110
if ( IS_OSX ) {
112
111
this . watchInParentDirectory ( ) ;
@@ -628,21 +627,34 @@ class DirectoryWatcher extends EventEmitter {
628
627
}
629
628
} ) ;
630
629
for ( const itemPath of itemPaths ) {
631
- const handleStats = ( err2 , stats ) => {
630
+ const handleStatsError = err2 => {
631
+ if (
632
+ err2 . code === "ENOENT" ||
633
+ err2 . code === "EPERM" ||
634
+ err2 . code === "EACCES" ||
635
+ err2 . code === "EBUSY"
636
+ ) {
637
+ this . setMissing ( itemPath , initial , "scan (" + err2 . code + ")" ) ;
638
+ } else {
639
+ this . onScanError ( err2 ) ;
640
+ }
641
+ itemFinished ( ) ;
642
+ return ;
643
+ } ;
644
+ fs . lstat ( itemPath , ( err2 , stats ) => {
632
645
if ( this . closed ) return ;
633
646
if ( err2 ) {
634
- if (
635
- err2 . code === "ENOENT" ||
636
- err2 . code === "EPERM" ||
637
- err2 . code === "EACCES" ||
638
- err2 . code === "EBUSY"
639
- ) {
640
- this . setMissing ( itemPath , initial , "scan (" + err2 . code + ")" ) ;
641
- } else {
642
- this . onScanError ( err2 ) ;
647
+ handleStatsError ( err2 ) ;
648
+ }
649
+ if (
650
+ stats . isSymbolicLink ( ) &&
651
+ this . watcherManager . options . followSymlinks
652
+ ) {
653
+ try {
654
+ stats = fs . statSync ( itemPath ) ;
655
+ } catch ( err3 ) {
656
+ handleStatsError ( err3 ) ;
643
657
}
644
- itemFinished ( ) ;
645
- return ;
646
658
}
647
659
if ( stats . isFile ( ) || stats . isSymbolicLink ( ) ) {
648
660
if ( stats . mtime ) {
@@ -665,12 +677,7 @@ class DirectoryWatcher extends EventEmitter {
665
677
) ;
666
678
}
667
679
itemFinished ( ) ;
668
- } ;
669
- if ( this . watcherManager . options . followSymlinks ) {
670
- fs . stat ( itemPath , handleStats ) ;
671
- } else {
672
- fs . lstat ( itemPath , handleStats ) ;
673
- }
680
+ } ) ;
674
681
}
675
682
itemFinished ( ) ;
676
683
} ) ;
0 commit comments