From d796424199b080ba14e8cd5bad545f80f87e1b06 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Wed, 27 Jul 2022 23:13:41 +1000 Subject: [PATCH] Fix `Records::overwrite`: Update file len Signed-off-by: Jiahao XU --- src/metafiles/binstall_v1.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/metafiles/binstall_v1.rs b/src/metafiles/binstall_v1.rs index 26d46f57..8f95e7a1 100644 --- a/src/metafiles/binstall_v1.rs +++ b/src/metafiles/binstall_v1.rs @@ -2,7 +2,7 @@ use std::{ borrow, cmp, collections::{btree_set, BTreeSet}, fs, hash, - io::{self, Write}, + io::{self, Seek, Write}, iter::{IntoIterator, Iterator}, path::{Path, PathBuf}, }; @@ -95,17 +95,20 @@ pub fn append_to_path(path: impl AsRef, iter: Iter) -> Result<(), Er where Iter: IntoIterator, { - let file = FileLock::new_exclusive( + let mut file = FileLock::new_exclusive( fs::OpenOptions::new() .create(true) .append(true) .open(path)?, )?; - write_to(file, &mut iter.into_iter()) + write_to(&mut file, &mut iter.into_iter()) } -pub fn write_to(file: FileLock, iter: &mut dyn Iterator) -> Result<(), Error> { +pub fn write_to( + file: &mut FileLock, + iter: &mut dyn Iterator, +) -> Result<(), Error> { let writer = io::BufWriter::with_capacity(512, file); let mut ser = serde_json::Serializer::new(writer); @@ -158,8 +161,14 @@ impl Records { } /// **Warning: This will overwrite all existing records!** - pub fn overwrite(self) -> Result<(), Error> { - write_to(self.file, &mut self.data.into_iter()) + pub fn overwrite(mut self) -> Result<(), Error> { + self.file.rewind()?; + write_to(&mut self.file, &mut self.data.into_iter())?; + + let len = self.file.stream_position()?; + self.file.set_len(len)?; + + Ok(()) } pub fn get(&self, value: impl AsRef) -> Option<&MetaData> {