From 32a2e618e0c1db5b818ee38efb2137a8b9a0054b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 08:20:24 +0000 Subject: [PATCH] perf(packager): stream file reading into sha256 hasher Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> --- tools/packager/src/main.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tools/packager/src/main.rs b/tools/packager/src/main.rs index 38d24ebd..9e256107 100644 --- a/tools/packager/src/main.rs +++ b/tools/packager/src/main.rs @@ -22,6 +22,19 @@ struct ReleaseDirectories { examples_dir: PathBuf, } +struct HashWriter<'a>(&'a mut Sha256); + +impl<'a> std::io::Write for HashWriter<'a> { + fn write(&mut self, buf: &[u8]) -> std::io::Result { + self.0.update(buf); + Ok(buf.len()) + } + + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} + fn main() -> anyhow::Result<()> { println!("=== Starting TechScript 2.0 Packaging Pipeline ==="); @@ -726,9 +739,7 @@ fn calculate_checksums_json(release_dir: &Path) -> anyhow::Result anyhow::Result anyhow::Result<()> { if file_path.exists() { let mut file = File::open(file_path)?; let mut hasher = Sha256::new(); - let mut buffer = Vec::new(); - file.read_to_end(&mut buffer)?; - hasher.update(&buffer); + std::io::copy(&mut file, &mut HashWriter(&mut hasher))?; let hash = hasher.finalize(); // Format to show filename relative to the release root