use entry file_type, improve test

This commit is contained in:
Bernardo 2019-01-25 22:13:55 +01:00 committed by Aleksey Kladov
parent d63e1cebff
commit 410a3ae6e8
3 changed files with 16 additions and 11 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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();