summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-04-08 19:09:30 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-04-08 20:31:54 +0200
commit94f99bb3465747cf24ec622b68f7fd370267695b (patch)
tree89b604fdbae9782b79a415c9f2ccb4496868739a
parent25cdd0f1a0ae0afab5e34b18ea00f1727d7176a9 (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.rs58
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);
}
}