chiark / gitweb /
cli bundle progress: Collect local zipfile members in a vec
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 00:25:52 +0000 (01:25 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 16 May 2022 02:09:35 +0000 (03:09 +0100)
This will let us easily count them, which we want to do for progress
reporting.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
cli/usebundles.rs

index 0f61bd766e5bc6c7c808fd23f23003759c9b7d6c..b390149739678ffdaf9fd4974c10b438d91118cf 100644 (file)
@@ -42,7 +42,8 @@ impl BundleForUpload {
       let f = File::open(&file).context("open")?;
       Self::prepare_open_file(&file, progress, f)?
     } else {
-      Self::prepare_from_dir(&file, progress, walk)?
+      let entries = walk.collect::<Result<Vec<_>,_>>()?;
+      Self::prepare_from_dir(&file, progress, entries)?
     }
   }
 
@@ -84,16 +85,13 @@ impl BundleForUpload {
   }
 
   #[throws(AE)]
-  pub fn prepare_from_dir<W>(dir: &str, progress: &mut termprogress::Nest,
-                             walk: W) -> Self
-  where W: Iterator<Item=walkdir::Result<walkdir::DirEntry>>
-  {
+  pub fn prepare_from_dir(dir: &str, progress: &mut termprogress::Nest,
+                          entries: Vec<walkdir::DirEntry>) -> Self {
     let zipfile = tempfile::tempfile().context("create tmp zipfile")?;
     let zipfile = BufWriter::new(zipfile);
     let mut zipfile = zipfile::ZipWriter::new(zipfile);
 
-    for ent in walk {
-      let ent = ent?;
+    for ent in entries {
       if ent.file_type().is_dir() { continue }
 
       let tail = {