From 1f6e9ecf51c3d7940815c32666ce67dd2f7ab569 Mon Sep 17 00:00:00 2001 From: Azalea Colburn Date: Fri, 14 Mar 2025 20:59:39 -0700 Subject: [PATCH] File paths are transformed into parent directory paths --- src/cmd/query.rs | 18 +++++++++++++++++- src/db/stream.rs | 6 +++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/cmd/query.rs b/src/cmd/query.rs index 362d80a..2609254 100644 --- a/src/cmd/query.rs +++ b/src/cmd/query.rs @@ -78,7 +78,7 @@ impl Query { fn get_stream<'a>(&self, db: &'a mut Database, now: Epoch) -> Result> { let mut options = StreamOptions::new(now) - .with_keywords(self.keywords.iter().map(|s| s.as_str())) + .with_keywords(self.transfomed_keywords()) .with_exclude(config::exclude_dirs()?); if !self.all { let resolve_symlinks = config::resolve_symlinks(); @@ -117,4 +117,20 @@ impl Query { } .spawn() } + + /// ## Returns + /// `self.keywords` with file paths transformed into their parent directory paths and directory paths unchanged + /// + /// ## Warning + /// Clones self.keywords + fn transfomed_keywords(&self) -> impl Iterator + use<'_> { + self.keywords.iter().map(|keyword| { + if !std::path::Path::new(keyword).is_dir() { + let dirs: Vec<&str> = keyword.split("/").collect(); + dirs.split_last().unwrap().1.join("/").to_string() + } else { + keyword.to_string() + } + }) + } } diff --git a/src/db/stream.rs b/src/db/stream.rs index 4af7d7a..8d99e9f 100644 --- a/src/db/stream.rs +++ b/src/db/stream.rs @@ -48,16 +48,16 @@ impl<'a> Stream<'a> { } fn filter_by_keywords(&self, path: &str) -> bool { - let (keywords_last, keywords) = match self.options.keywords.split_last() { + let (last_keyword, keywords) = match self.options.keywords.split_last() { Some(split) => split, None => return true, }; let path = util::to_lowercase(path); let mut path = path.as_str(); - match path.rfind(keywords_last) { + match path.rfind(last_keyword) { Some(idx) => { - if path[idx + keywords_last.len()..].contains(path::is_separator) { + if path[idx + last_keyword.len()..].contains(path::is_separator) { return false; } path = &path[..idx];