chiark / gitweb /
progress reporting: Nest: Provide and use more desc plumbing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 00:59:41 +0000 (01:59 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 02:09:35 +0000 (03:09 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
cli/forgame.rs
cli/usebundles.rs
support/termprogress.rs

index e8116459af55f0d126cdba678733b48b8a3aa098..9999715f8ebcd63d01484a3d1426955664539db8 100644 (file)
@@ -93,8 +93,10 @@ mod reset_game {
       let progress = ma.progressbar()?;
       let mut progress = termprogress::Nest::with_total
         (n_bundles as f32, progress);
+      let bundle_i_msg = |i| Some(format!("{}/{}", i, n_bundles));
 
-      let local = args.bundles.into_iter().map(|file| {
+      let local = args.bundles.into_iter().enumerate().map(|(i,file)| {
+        progress.start_phase(0., bundle_i_msg(i), "preparing".into());
         BundleForUpload::prepare(file, &mut progress)
       }).collect::<Result<Vec<_>,_>>()?;
 
@@ -150,7 +152,8 @@ mod reset_game {
           }
           for (i, bundle) in local.into_iter().enumerate() {
             progress.start_phase(PROGFRAC_UPLOAD,
-                                 format!("{}/{}", i, n_bundles));
+                                 bundle_i_msg(i),
+                                 "uploading".into());
             bundle.upload(&ma, &mut chan, &mut progress)?;
           }
         },
index 197e2b2a7c47744bac9c1902310ee510dd1c505f..fdae7bfcf77cbd00d578eb4e21ae38d856e1a57b 100644 (file)
@@ -22,7 +22,7 @@ pub struct BundleForUpload {
 impl BundleForUpload {
   #[throws(AE)]
   pub fn prepare(file: String, progress: &mut termprogress::Nest) -> Self {
-    progress.start_phase(PROGFRAC_PREP, default());
+    progress.start_phase(PROGFRAC_PREP, None, "inspecting".into());
 
     let mut walk = WalkDir::new(&file)
       .same_file_system(true)
@@ -50,7 +50,7 @@ impl BundleForUpload {
   #[throws(AE)]
   pub fn prepare_open_file(file: &str, progress: &mut termprogress::Nest,
                            f: File) -> Self {
-    progress.start_phase(PROGFRAC_HASH, "hashing".into());
+    progress.start_phase(PROGFRAC_HASH, None, "hashing".into());
 
     let size = f
       .metadata().context("fstat bundle file")?
index cc4072cafa4518444b2f63b61d835202d9764e09..8561d54b09cef06c2b8e1159f258e3ea284b6e6b 100644 (file)
@@ -192,19 +192,23 @@ impl Nest {
   ///
   /// From now on, when reports are issued, the inner phases are each
   /// mapped to the range "now" to "now" `frac`
-  pub fn start_phase(&mut self, frac: f32, desc_prefix: String) {
+  pub fn start_phase(&mut self, frac: f32,
+                     phase_prefix: Option<String>,
+                     item_desc: Cow<'_,str>) {
     self.outer_phase_base += self.outer_phase_size;
     self.outer_phase_size = frac;
 
+    if let Some(p) = phase_prefix {
+      self.desc_prefix = p;
+    }
+
     let f = self.outer_phase_base / self.outer_total;
     let value = progress::Value::Fraction { f };
 
     self.actual_reporter.report(&ProgressInfo {
-      phase: progress::Count { desc: (&*desc_prefix).into(), value: value },
-      item:  progress::Count { desc: default(),            value: default() },
+      phase: progress::Count { desc: (&*self.desc_prefix).into(), value },
+      item:  progress::Count { desc: item_desc,          value: default() },
     });
-
-    self.desc_prefix = desc_prefix;
   }
 }