diff options
Diffstat (limited to 'src/project.rs')
-rw-r--r-- | src/project.rs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/project.rs b/src/project.rs index 7351ae4..5f98ef6 100644 --- a/src/project.rs +++ b/src/project.rs @@ -15,11 +15,15 @@ use crate::{parser::FilterMap, path::PathMatcher}; pub struct Projects { inner: HashMap<PathBuf, Duration>, filters: Vec<Box<dyn FilterMap>>, + mtime: bool, } impl Projects { - pub fn new() -> Self { - Self::default() + pub fn new(fallback: bool) -> Self { + Self { + mtime: fallback, + ..Default::default() + } } pub fn add_filter<T: FilterMap + 'static>(&mut self, filter: T) { @@ -77,8 +81,12 @@ impl Extend<PathBuf> for Projects { T: IntoIterator<Item = PathBuf>, { for path_buf in iter { - if let Some(project) = self.filters.filter_map(path_buf) { + if let Some(project) = self.filters.filter_map(path_buf.to_owned()) { self.insert(project) + } else if self.mtime { + if let Ok(project) = Project::try_from(path_buf) { + self.insert(project) + } } } } @@ -97,14 +105,10 @@ impl Extend<Project> for Projects { impl From<crate::config::Projects> for Projects { fn from(value: crate::config::Projects) -> Self { - let mut projects = Projects::new(); - - if value.all { - projects.add_filter(PathMatcher::All); - } + let mut projects = Projects::new(value.mtime); if let Some(pattern) = &value.pattern { - projects.add_filter(PathMatcher::Pattern(pattern.to_owned())); + projects.add_filter(PathMatcher(pattern.to_owned())); } #[cfg(feature = "git")] |