From bb43d46b5474f48e835c6ed8cdab3f44d0236280 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Tue, 23 Jun 2026 04:33:21 -0500 Subject: [PATCH 1/3] feat: add configurable compression level to SD0 converter Allow callers to specify a compression level (0-9) instead of always using best (9). This enables faster builds during development while keeping the option for maximum compression in release builds. Co-Authored-By: Claude Sonnet 4.6 --- modules/pack/src/sd0/fs.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/pack/src/sd0/fs.rs b/modules/pack/src/sd0/fs.rs index 098dded1..679eb345 100644 --- a/modules/pack/src/sd0/fs.rs +++ b/modules/pack/src/sd0/fs.rs @@ -26,6 +26,8 @@ use super::{ pub struct Converter { /// Whether to generate 'si0' files pub generate_segment_index: bool, + /// Compression level (0-9). Defaults to best (9) if not set. + pub compression: Option, } const fn compress_bound(source_len: usize) -> usize { @@ -52,7 +54,7 @@ impl Converter { let mut start: u32 = 0; let mut compressed_start: u32 = 0; - let level = Compression::best(); + let level = self.compression.unwrap_or(Compression::best()); let mut cmp = flate2::Compress::new(level, true); output_file.write_all(b"sd0\x01\xff")?; From b6025433da7e1dcf8e4ea5836f3d8c62184998e4 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Tue, 23 Jun 2026 15:21:14 -0500 Subject: [PATCH 2/3] refactor: use u32 for compression level instead of exposing flate2 type Address review feedback: - Change compression field from Option to Option to avoid leaking flate2's Compression type in the public API - Use unwrap_or_else(Compression::best) to avoid eager evaluation Co-Authored-By: Claude Sonnet 4.6 --- modules/pack/src/sd0/fs.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/pack/src/sd0/fs.rs b/modules/pack/src/sd0/fs.rs index 679eb345..2bbc284f 100644 --- a/modules/pack/src/sd0/fs.rs +++ b/modules/pack/src/sd0/fs.rs @@ -27,7 +27,7 @@ pub struct Converter { /// Whether to generate 'si0' files pub generate_segment_index: bool, /// Compression level (0-9). Defaults to best (9) if not set. - pub compression: Option, + pub compression: Option, } const fn compress_bound(source_len: usize) -> usize { @@ -54,7 +54,10 @@ impl Converter { let mut start: u32 = 0; let mut compressed_start: u32 = 0; - let level = self.compression.unwrap_or(Compression::best()); + let level = self + .compression + .map(Compression::new) + .unwrap_or_else(Compression::best); let mut cmp = flate2::Compress::new(level, true); output_file.write_all(b"sd0\x01\xff")?; From 57d5f8841f174ef1d8488cf0aa22e90397067faa Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Tue, 23 Jun 2026 15:59:01 -0500 Subject: [PATCH 3/3] fix: use Exclude effect for RemFile in push_command RemFile was incorrectly using ArgEffect::Include instead of ArgEffect::Exclude, causing file exclusions to be treated as inclusions. Co-Authored-By: Claude Sonnet 4.6 --- modules/pack/src/txt/gen.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/pack/src/txt/gen.rs b/modules/pack/src/txt/gen.rs index eb32eb7b..c6fdaaf3 100644 --- a/modules/pack/src/txt/gen.rs +++ b/modules/pack/src/txt/gen.rs @@ -88,7 +88,7 @@ pub fn push_command(config: &mut Config, cmd: Command) { Command::RemFile { filename } => { let pack = config.pack_files.iter_mut().next_back().unwrap(); pack.args.push(PackFileArg { - effect: ArgEffect::Include, + effect: ArgEffect::Exclude, name: filename, kind: crate::pki::gen::ArgKind::File, })