aboutsummaryrefslogtreecommitdiffstats
path: root/src/project.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/project.rs')
-rw-r--r--src/project.rs22
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")]