chiark / gitweb /
bundles: Plumb for_progress through to processing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 10 May 2021 18:02:05 +0000 (19:02 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 10 May 2021 18:02:05 +0000 (19:02 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/bundles.rs

index 9efcf7b793984001c84295d07e29d4fb5868d000..d5c16e26cea66d1f9ffc080ac7f1d7f05b57d069 100644 (file)
@@ -81,7 +81,7 @@ fn execute_and_respond<R,W>(cs: &mut CommandStreamData, cmd: MgmtCommand,
   where R: Read, W: Write
 {
   let mut bulk_download: Option<Box<dyn Read>> = None;
-  let for_response = for_response
+  let mut for_response = for_response
     .write_withbulk().context("start to respond")?;
 
   let mut cmd_s = log_enabled!(log::Level::Info)
@@ -233,7 +233,7 @@ fn execute_and_respond<R,W>(cs: &mut CommandStreamData, cmd: MgmtCommand,
         let upload = bundles.start_upload(ig, kind)?;
         (upload, auth)
       };
-      let uploaded = upload.bulk(&mut bulk_upload, &hash)?;
+      let uploaded = upload.bulk(&mut bulk_upload, &hash, &mut for_response)?;
       {
         let gref = Instance::lookup_by_name(&game, auth)?;
         let mut bundles = gref.lock_bundles();
index fab48e7a0162c5a42899dba9802009fe75b6d040..a69b2d05f8c3e36e7c6afdccbe4427281947cb42 100644 (file)
@@ -3,6 +3,7 @@
 // There is NO WARRANTY.
 
 use crate::prelude::*;
+use crate::packetframe::ResponseWriter;
 
 //---------- public types ----------
 
@@ -393,7 +394,10 @@ where EH: BundleParseError,
 }
 
 #[throws(LE)]
-fn process_bundle(id: Id, instance: &InstanceName) {
+fn process_bundle<W>(id: Id, instance: &InstanceName,
+                     _for_progress: &ResponseWriter<W>)
+where W: Write
+{
   let dir = id.path_dir(instance);
   fs::create_dir(&dir)
     .with_context(|| dir.clone()).context("mkdir").map_err(IE::from)?;
@@ -540,8 +544,9 @@ impl InstanceBundles {
 
 impl Uploading {
   #[throws(MgmtError)]
-  pub fn bulk<R>(self, data: &mut R, expected: &Hash) -> Uploaded
-  where R: Read
+  pub fn bulk<R,W>(self, data: &mut R, expected: &Hash,
+                   for_progress: &mut ResponseWriter<W>) -> Uploaded
+  where R: Read, W: Write
   {
     let Uploading { id, mut file, instance } = self;
     let tmp = id.path_tmp(&instance);
@@ -561,7 +566,7 @@ impl Uploading {
 
     let parsed = parse_bundle::<LoadError,_>(id, &mut file, &tmp)?;
 
-    process_bundle(id, &*instance)?;
+    process_bundle(id, &*instance, for_progress)?;
 
     Uploaded { id, parsed }
   }