forked from notify-rs/notify
-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Need to think about how remove_watch should work.
Lines 407 to 450 in 02c3f56
| fn remove_watch(&mut self, path: PathBuf) -> Result<()> { | |
| log::trace!("removing kqueue watch: {}", path.display()); | |
| match self.watches.remove(&path) { | |
| None => return Err(Error::watch_not_found()), | |
| Some(recursive_mode) => { | |
| self.remove_maybe_recursive_watch(path, recursive_mode.is_recursive())?; | |
| self.kqueue.watch()?; | |
| } | |
| } | |
| Ok(()) | |
| } | |
| /// The caller of this function must call `self.kqueue.watch()` afterwards to register the new watch. | |
| fn remove_maybe_recursive_watch(&mut self, path: PathBuf, is_recursive: bool) -> Result<()> { | |
| if is_recursive { | |
| self.remove_single_watch(path.clone())?; | |
| for entry in WalkDir::new(&path) | |
| .follow_links(self.follow_symlinks) | |
| .into_iter() | |
| { | |
| let entry = entry.map_err(map_walkdir_error)?; | |
| if entry.path() == path { | |
| continue; | |
| } | |
| self.remove_single_watch(entry.into_path())?; | |
| } | |
| } else { | |
| self.remove_single_watch(path.clone())?; | |
| } | |
| Ok(()) | |
| } | |
| /// Removes a single watch from the kqueue. | |
| /// | |
| /// The caller of this function must call `self.kqueue.watch()` afterwards to unregister the old watch. | |
| fn remove_single_watch(&mut self, path: PathBuf) -> Result<()> { | |
| self.kqueue | |
| .remove_filename(&path, EventFilter::EVFILT_VNODE) | |
| .map_err(|e| Error::io(e).add_path(path.clone()))?; | |
| self.watch_handles.remove(&path); | |
| Ok(()) | |
| } |
Leaving it as-is for now as I don't use it.
Metadata
Metadata
Assignees
Labels
No labels