diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2017-10-31 15:47:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-31 15:47:57 +0100 |
commit | dc26f8c20cd9724201ee5bd60a22d3e422b56e7c (patch) | |
tree | 5b1e9abcf9988cfb3164762474f04689138c1c6c /bin/core/imag-store/src | |
parent | 2d94be583180e4f8025e2aa1d2120b2ba925c41c (diff) | |
parent | 2855a89e24769b6ca977077725ae9841d5644b12 (diff) |
Merge pull request #1156 from matthiasbeyer/store-verify-from-cli-app
Move verify implementation from Store to CLI interface
Diffstat (limited to 'bin/core/imag-store/src')
-rw-r--r-- | bin/core/imag-store/src/verify.rs | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/bin/core/imag-store/src/verify.rs b/bin/core/imag-store/src/verify.rs index 6c9cb703..b806eac2 100644 --- a/bin/core/imag-store/src/verify.rs +++ b/bin/core/imag-store/src/verify.rs @@ -17,11 +17,56 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::ops::Deref; + use libimagrt::runtime::Runtime; use libimagutil::warn_exit::warn_exit; +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) { - if rt.store().verify() { + 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 + }, + } + }, + }); + + if result { info!("Store seems to be fine"); } else { warn_exit("Store seems to be broken somehow", 1); |