use entry file_type, improve test
This commit is contained in:
parent
d63e1cebff
commit
410a3ae6e8
@ -65,7 +65,7 @@ impl Watcher {
|
||||
{
|
||||
match res {
|
||||
Ok(entry) => {
|
||||
if entry.path().is_dir() {
|
||||
if entry.file_type().is_dir() {
|
||||
watch_one(self.watcher.as_ref(), entry.path());
|
||||
}
|
||||
}
|
||||
@ -172,11 +172,11 @@ impl WatcherWorker {
|
||||
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
|
||||
|
@ -62,7 +62,8 @@ impl RootFilter {
|
||||
|
||||
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 {
|
||||
|
@ -1,12 +1,16 @@
|
||||
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);
|
||||
}
|
||||
@ -14,7 +18,7 @@ fn process_tasks(vfs: &mut Vfs, num_tasks: u32) {
|
||||
|
||||
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 {
|
||||
@ -26,7 +30,7 @@ macro_rules! assert_match {
|
||||
|
||||
#[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"),
|
||||
@ -166,8 +170,8 @@ fn test_vfs_works() -> std::io::Result<()> {
|
||||
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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user