diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-04-08 19:09:30 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-04-08 20:31:54 +0200 |
commit | 94f99bb3465747cf24ec622b68f7fd370267695b (patch) | |
tree | 89b604fdbae9782b79a415c9f2ccb4496868739a | |
parent | 25cdd0f1a0ae0afab5e34b18ea00f1727d7176a9 (diff) |
Rewrite source verification output
This patch rewrites the source verification output to be one progress bar that
prints all necessary information: That is, only a one-line success message, or
multiple lines in case of error.
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Tested-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/source.rs | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/src/commands/source.rs b/src/commands/source.rs index c3655cc..7f4a1bb 100644 --- a/src/commands/source.rs +++ b/src/commands/source.rs @@ -10,7 +10,6 @@ use std::io::Write; use std::path::PathBuf; -use std::sync::Arc; use std::convert::TryFrom; use anyhow::anyhow; @@ -86,21 +85,19 @@ pub(in crate::commands) async fn verify_impl<'a, I>( where I: Iterator<Item = &'a Package> + 'a, { - let multi = Arc::new({ - let mp = indicatif::MultiProgress::new(); - if progressbars.hide() { - mp.set_draw_target(indicatif::ProgressDrawTarget::hidden()); - } - mp - }); - - let results = packages + let sources = packages .map(|p| sc.sources_for(p).into_iter()) .flatten() - .map(|src| (multi.clone(), src)) - .map(|(multi, source)| async move { + .collect::<Vec<_>>(); + + let bar = progressbars.bar(); + bar.set_message("Verifying sources"); + bar.set_length(sources.len() as u64); + + let results = sources.into_iter() + .map(|src| (bar.clone(), src)) + .map(|(bar, source)| async move { trace!("Verifying: {}", source.path().display()); - let bar = multi.add(progressbars.bar()); if source.path().exists() { trace!("Exists: {}", source.path().display()); source.verify_hash().await.with_context(|| { @@ -108,37 +105,36 @@ where })?; trace!("Success verifying: {}", source.path().display()); - let msg = format!("Ok: {}", source.path().display()).green(); - bar.finish_with_message(&msg); - Ok(msg) + bar.inc(1); + Ok(()) } else { trace!("Failed verifying: {}", source.path().display()); - bar.finish_with_message(&"Error".red()); + bar.inc(1); Err(anyhow!("Source missing: {}", source.path().display())) } }) .collect::<futures::stream::FuturesUnordered<_>>() - .collect::<Vec<Result<_>>>(); + .collect::<Vec<Result<_>>>() + .await; - let multibar_block = tokio::task::spawn_blocking(move || multi.join()); - let (results, _) = tokio::join!(results, multibar_block); info!("Verification processes finished"); + if results.iter().any(Result::is_err) { + bar.finish_with_message("Source verication failed"); + } else { + bar.finish_with_message("Source verication successfull"); + } + let out = std::io::stdout(); let mut any_error = false; for result in results { - match result { - Err(e) => { - let mut outlock = out.lock(); - any_error = true; - for cause in e.chain() { - let _ = writeln!(outlock, "Error: {}", cause.to_string().red()); - } - let _ = writeln!(outlock); - } - Ok(s) => { - let _ = writeln!(out.lock(), "{}", s.green()); + if let Err(e) = result { + let mut outlock = out.lock(); + any_error = true; + for cause in e.chain() { + let _ = writeln!(outlock, "Error: {}", cause.to_string().red()); } + let _ = writeln!(outlock); } } |