diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2018-05-02 18:39:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-02 18:39:11 +0200 |
commit | eb20a9d881eb801ff794d7b0d20e2a012d2f9094 (patch) | |
tree | f3c5b9216c9de8df3a3da9f3f28d0d90998ef6ce /bin | |
parent | b52cb0d69765ac216252e0d30727512454ca2511 (diff) | |
parent | 0dbef993c102598f5d58a04e40bb6204d2ab4839 (diff) |
Merge pull request #1477 from matthiasbeyer/libimagstore/remove-walk
Remove Store::walk()
Diffstat (limited to 'bin')
-rw-r--r-- | bin/core/imag-store/src/verify.rs | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/bin/core/imag-store/src/verify.rs b/bin/core/imag-store/src/verify.rs index d60f7086..900fde0b 100644 --- a/bin/core/imag-store/src/verify.rs +++ b/bin/core/imag-store/src/verify.rs @@ -21,49 +21,34 @@ use std::ops::Deref; use libimagrt::runtime::Runtime; use libimagutil::warn_exit::warn_exit; +use libimagerror::trace::MapErrTrace; +use libimagerror::iter::TraceIterator; use libimagstore::store::Header; -use libimagstore::store::StoreObject; /// Verify the store. /// /// This function is not intended to be called by normal programs but only by `imag-store`. pub fn verify(rt: &Runtime) { - use libimagerror::trace::trace_error_dbg; - info!("Header | Content length | Path"); info!("-------+----------------+-----"); let result = rt .store() - .walk("") - .into_iter() - .all(|res| match res { - StoreObject::Collection(_) => true, - StoreObject::Id(id) => { - match rt.store().get(id.clone()) { - Ok(Some(fle)) => { - let p = fle.get_location(); - let content_len = fle.get_content().len(); - let header = if fle.get_header().verify().is_ok() { - "ok" - } else { - "broken" - }; - - info!("{: >6} | {: >14} | {:?}", header, content_len, p.deref()); - true - }, - - Ok(None) => { - info!("{: >6} | {: >14} | {:?}", "?", "couldn't load", id.local()); - true - }, - - Err(e) => { - trace_error_dbg(&e); - false - }, - } - }, + .entries() + .map_err_trace_exit_unwrap(1) + .into_get_iter() + .trace_unwrap_exit(1) + .filter_map(|x| x) + .all(|fle| { + let p = fle.get_location(); + let content_len = fle.get_content().len(); + let (header, status) = if fle.get_header().verify().is_ok() { + ("ok", true) + } else { + ("broken", false) + }; + + info!("{: >6} | {: >14} | {:?}", header, content_len, p.deref()); + status }); if result { |