diff options
Diffstat (limited to 'bin/core/imag-grep/src/lib.rs')
-rw-r--r-- | bin/core/imag-grep/src/lib.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/bin/core/imag-grep/src/lib.rs b/bin/core/imag-grep/src/lib.rs index fa7bbc3a..76ea5bca 100644 --- a/bin/core/imag-grep/src/lib.rs +++ b/bin/core/imag-grep/src/lib.rs @@ -56,7 +56,7 @@ use resiter::IterInnerOkOrElse; use libimagrt::runtime::Runtime; use libimagrt::application::ImagApplication; use libimagstore::store::Entry; - +use libimagstore::iter::get::StoreIdGetIteratorExtension; mod ui; @@ -86,11 +86,26 @@ impl ImagApplication for ImagGrep { .unwrap() // ensured by clap .map_err(|e| anyhow!("Regex building error: {:?}", e))?; - let overall_count = rt - .store() - .entries()? - .into_get_iter() - .map_inner_ok_or_else(|| anyhow!("Entry from entries missing")) + let entries : Box<dyn Iterator<Item = _ >> = if rt.ids_from_stdin() { + let iter = rt.ids::<crate::ui::PathProvider>()? + .ok_or_else(|| anyhow!("No ids supplied"))? + .into_iter() + .map(Ok) + .into_get_iter(rt.store()) + .map_inner_ok_or_else(|| anyhow!("Did not find one entry")) + .inspect(|e| debug!("Editing = {:?}", e)); + + Box::new(iter) + } else { + let iter = rt.store() + .entries()? + .into_get_iter() + .map_inner_ok_or_else(|| anyhow!("Entry from entries missing")); + + Box::new(iter) + }; + + let overall_count = entries .and_then_ok(|entry| { if pattern.is_match(entry.get_content()) { debug!("Matched: {}", entry.get_location()); |