chiark / gitweb /
bundles: Move parsing into bulk phase
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 10 May 2021 00:00:15 +0000 (01:00 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 10 May 2021 00:00:15 +0000 (01:00 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bundles.rs

index dc40f20f9e3e97729eb682ccdec1a0feafd59d06..c4d5c63972c13ab49e18e4b4726fbf04fab7eba4 100644 (file)
@@ -56,7 +56,7 @@ pub struct Uploading {
 /// returned by start_upload
 pub struct Uploaded {
   id: Id,
-  file: fs::File,
+  parsed: Parsed,
 }
 
 #[derive(Debug,Copy,Clone,Error)]
@@ -544,25 +544,26 @@ impl Uploading {
 
     let (hash, file) = file.finish();
 
-    let file = file.into_inner().map_err(|e| e.into_error())
+    let mut file = file.into_inner().map_err(|e| e.into_error())
       .with_context(|| tmp.clone()).context("flush").map_err(IE::from)?;
     if hash.as_slice() != &expected.0[..] { throw!(ME::UploadCorrupted) }
 
-    Uploaded { id, file }
+    file.rewind().context("rewind"). map_err(IE::from)?;
+    let mut file = BufReader::new(file);
+
+    let parsed = parse_bundle::<LoadError>(id, &mut file, &tmp)?;
+
+    Uploaded { id, parsed }
   }
 }
 
 impl InstanceBundles {
   #[throws(MgmtError)]
   pub fn finish_upload(&mut self, ig: &mut Instance,
-                       Uploaded { id, mut file }: Uploaded) {
+                       Uploaded { id, parsed }: Uploaded) {
     let tmp = id.path_tmp(&ig.name);
     let install = id.path_(&ig.name);
 
-    file.rewind().context("rewind"). map_err(IE::from)?;
-    let mut file = BufReader::new(file);
-
-    let parsed = parse_bundle::<LoadError>(id, &mut file, &install)?;
     incorporate_bundle(self, ig, id, parsed)?;
 
     self.updated(ig);