mirror of
https://github.com/watchexec/watchexec.git
synced 2024-09-29 22:51:33 +02:00
globset: Always pass non-path events (#248)
This commit is contained in:
parent
366277c6c1
commit
a6c997f470
@ -110,43 +110,49 @@ impl Filterer for GlobsetFilterer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(event.paths().any(|(path, file_type)| {
|
let mut paths = event.paths().peekable();
|
||||||
let _span = trace_span!("path", ?path).entered();
|
if paths.peek().is_none() {
|
||||||
let is_dir = file_type
|
trace!("non-path event (pass)");
|
||||||
.map(|t| matches!(t, FileType::Dir))
|
Ok(true)
|
||||||
.unwrap_or(false);
|
} else {
|
||||||
|
Ok(paths.any(|(path, file_type)| {
|
||||||
|
let _span = trace_span!("path", ?path).entered();
|
||||||
|
let is_dir = file_type
|
||||||
|
.map(|t| matches!(t, FileType::Dir))
|
||||||
|
.unwrap_or(false);
|
||||||
|
|
||||||
if self.ignores.matched(path, is_dir).is_ignore() {
|
if self.ignores.matched(path, is_dir).is_ignore() {
|
||||||
trace!("ignored by globset ignore");
|
trace!("ignored by globset ignore");
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.filters.num_ignores() > 0 && !self.filters.matched(path, is_dir).is_ignore() {
|
|
||||||
trace!("ignored by globset filters");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if !self.extensions.is_empty() {
|
|
||||||
if is_dir {
|
|
||||||
trace!("failed on extension check due to being a dir");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ext) = path.extension() {
|
if self.filters.num_ignores() > 0 && !self.filters.matched(path, is_dir).is_ignore() {
|
||||||
if !self.extensions.iter().any(|e| e == ext) {
|
trace!("ignored by globset filters");
|
||||||
trace!("ignored by extension filter");
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if !self.extensions.is_empty() {
|
||||||
|
if is_dir {
|
||||||
|
trace!("failed on extension check due to being a dir");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
trace!(
|
|
||||||
?path,
|
|
||||||
"failed on extension check due to having no extension"
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
true
|
if let Some(ext) = path.extension() {
|
||||||
}))
|
if !self.extensions.iter().any(|e| e == ext) {
|
||||||
|
trace!("ignored by extension filter");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
trace!(
|
||||||
|
?path,
|
||||||
|
"failed on extension check due to having no extension"
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,6 +347,26 @@ async fn multipath_allow_on_any_one_pass() {
|
|||||||
assert!(filterer.check_event(&event).unwrap());
|
assert!(filterer.check_event(&event).unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn nonpath_event_passes() {
|
||||||
|
use watchexec::{
|
||||||
|
event::{Event, Tag, Source},
|
||||||
|
filter::Filterer,
|
||||||
|
};
|
||||||
|
|
||||||
|
let filterer = filt(&[], &[], &["py"]).await;
|
||||||
|
|
||||||
|
assert!(filterer.check_event(&Event {
|
||||||
|
tags: vec![Tag::Source(Source::Internal)],
|
||||||
|
metadata: Default::default(),
|
||||||
|
}).unwrap());
|
||||||
|
|
||||||
|
assert!(filterer.check_event(&Event {
|
||||||
|
tags: vec![Tag::Source(Source::Keyboard)],
|
||||||
|
metadata: Default::default(),
|
||||||
|
}).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
// The following tests replicate the "buggy"/"confusing" watchexec v1 behaviour.
|
// The following tests replicate the "buggy"/"confusing" watchexec v1 behaviour.
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
Loading…
Reference in New Issue
Block a user