Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/vfs-notify/src/lib.rs')
-rw-r--r--crates/vfs-notify/src/lib.rs25
1 files changed, 16 insertions, 9 deletions
diff --git a/crates/vfs-notify/src/lib.rs b/crates/vfs-notify/src/lib.rs
index c6393cc692..f55ce24597 100644
--- a/crates/vfs-notify/src/lib.rs
+++ b/crates/vfs-notify/src/lib.rs
@@ -208,6 +208,22 @@ impl NotifyActor {
)
})
.filter_map(|path| -> Option<(AbsPathBuf, Option<Vec<u8>>)> {
+ // Ignore events for files/directories that we're not watching.
+ if !(self.watched_file_entries.contains(&path)
+ || self
+ .watched_dir_entries
+ .iter()
+ .any(|dir| dir.contains_file(&path)))
+ {
+ return None;
+ }
+
+ // For removed files, fs::metadata() will return Err, but
+ // we still want to update the VFS.
+ if matches!(event.kind, EventKind::Remove(_)) {
+ return Some((path, None));
+ }
+
let meta = fs::metadata(&path).ok()?;
if meta.file_type().is_dir()
&& self
@@ -223,15 +239,6 @@ impl NotifyActor {
return None;
}
- if !(self.watched_file_entries.contains(&path)
- || self
- .watched_dir_entries
- .iter()
- .any(|dir| dir.contains_file(&path)))
- {
- return None;
- }
-
let contents = read(&path);
Some((path, contents))
})