diff options
Diffstat (limited to 'bin/core/imag-diagnostics/src/lib.rs')
-rw-r--r-- | bin/core/imag-diagnostics/src/lib.rs | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/bin/core/imag-diagnostics/src/lib.rs b/bin/core/imag-diagnostics/src/lib.rs index 1b3ec62b..427abc67 100644 --- a/bin/core/imag-diagnostics/src/lib.rs +++ b/bin/core/imag-diagnostics/src/lib.rs @@ -57,7 +57,7 @@ use libimagentrylink::linkable::Linkable; use toml::Value; use toml_query::read::TomlValueReadExt; -use indicatif::{ProgressBar, ProgressStyle}; +use indicatif::{ProgressIterator, ProgressBar, ProgressStyle}; use failure::Fallible as Result; use failure::err_msg; use clap::App; @@ -116,21 +116,24 @@ impl ImagApplication for ImagDiagnostics { let tick_chars = get_config(&rt, "rt.progressticker_chars")?; let verbose = rt.cli().is_present("more-output"); - let style = if let Some(tick_chars) = tick_chars { - ProgressStyle::default_spinner().tick_chars(&tick_chars) - } else { - ProgressStyle::default_spinner() + let progressbar = { + let p = ProgressBar::new(100); + p.set_style({ + if let Some(tick_chars) = tick_chars { + ProgressStyle::default_spinner().tick_chars(&tick_chars) + } else { + ProgressStyle::default_spinner() + } + }); + p.set_message("Accumulating data"); + p }; - let spinner = ProgressBar::new_spinner(); - spinner.enable_steady_tick(100); - spinner.set_style(style); - spinner.set_message("Accumulating data"); - let diags = rt.store() .entries()? .into_get_iter() .map_inner_ok_or_else(|| err_msg("Unable to get entry")) + .progress_with(progressbar) .and_then_ok(|e| { let diag = Diagnostic::for_entry(&e); debug!("Diagnostic for '{:?}' = {:?}", e.get_location(), diag); @@ -139,16 +142,19 @@ impl ImagApplication for ImagDiagnostics { }) .collect::<Result<Vec<_>>>()?; - spinner.finish(); - let n = diags.len(); - let progress = ProgressBar::new(n as u64); - let style = if let Some(template) = template { - ProgressStyle::default_bar().template(&template) - } else { - ProgressStyle::default_bar() + let n = diags.len(); + let progressbar = { + let p = ProgressBar::new(n as u64); + p.set_style({ + if let Some(template) = template { + ProgressStyle::default_bar().template(&template) + } else { + ProgressStyle::default_bar() + } + }); + p.set_message("Calculating stats"); + p }; - progress.set_style(style); - progress.set_message("Calculating stats"); let mut version_counts : BTreeMap<String, usize> = BTreeMap::new(); let mut sum_header_sections = 0; @@ -161,7 +167,7 @@ impl ImagApplication for ImagDiagnostics { let mut num_links = 0; let mut max_links : Option<(usize, StoreId)> = None; - for diag in diags.iter() { + for diag in diags.iter().progress_with(progressbar) { sum_header_sections += diag.header_sections; sum_bytecount_content += diag.bytecount_content; sum_overall_byte_size += diag.overall_byte_size; @@ -192,11 +198,8 @@ impl ImagApplication for ImagDiagnostics { } } - progress.inc(1); } - progress.finish(); - let mut out = rt.stdout(); writeln!(out, "imag version {}", { env!("CARGO_PKG_VERSION") })?; |