{
match res {
Ok(entry) => {
- if entry.path().is_dir() {
+ if entry.file_type().is_dir() {
watch_one(self.watcher.as_ref(), entry.path());
}
}
let filter = &self.roots[root];
for res in WalkDir::new(dir)
.into_iter()
- .filter_entry(|entry| filter.can_contain(entry.path()).is_some())
+ .filter_entry(filter.entry_filter())
{
match res {
Ok(entry) => {
- if entry.path().is_dir() {
+ if entry.file_type().is_dir() {
watch_one(self.watcher.as_ref(), entry.path());
} else {
// emit only for files otherwise we will cause watch_recursive to be called again with a dir that we are already watching
pub(crate) fn entry_filter<'a>(&'a self) -> impl FnMut(&DirEntry) -> bool + 'a {
move |entry: &DirEntry| {
- if entry.path().is_dir() && self.excluded_dirs.iter().any(|it| it == entry.path()) {
+ if entry.file_type().is_dir() && self.excluded_dirs.iter().any(|it| it == entry.path())
+ {
// do not walk nested roots
false
} else {
-use std::{collections::HashSet, fs};
+use std::{collections::HashSet, fs, time::Duration};
-use flexi_logger::Logger;
+// use flexi_logger::Logger;
+use crossbeam_channel::RecvTimeoutError;
use ra_vfs::{Vfs, VfsChange};
use tempfile::tempdir;
fn process_tasks(vfs: &mut Vfs, num_tasks: u32) {
for _ in 0..num_tasks {
- let task = vfs.task_receiver().recv().unwrap();
+ let task = vfs
+ .task_receiver()
+ .recv_timeout(Duration::from_secs(3))
+ .unwrap();
log::debug!("{:?}", task);
vfs.handle_task(task);
}
macro_rules! assert_match {
($x:expr, $pat:pat) => {
- assert_match!($x, $pat, assert!(true))
+ assert_match!($x, $pat, ())
};
($x:expr, $pat:pat, $assert:expr) => {
match $x {
#[test]
fn test_vfs_works() -> std::io::Result<()> {
- Logger::with_str("vfs=debug,ra_vfs=debug").start().unwrap();
+ // Logger::with_str("vfs=debug,ra_vfs=debug").start().unwrap();
let files = [
("a/foo.rs", "hello"),
fs::write(&dir.path().join("a/target/new.rs"), "ignore me").unwrap();
assert_match!(
- vfs.task_receiver().try_recv(),
- Err(crossbeam_channel::TryRecvError::Empty)
+ vfs.task_receiver().recv_timeout(Duration::from_millis(300)), // slightly more than watcher debounce delay
+ Err(RecvTimeoutError::Timeout)
);
vfs.shutdown().unwrap();