Skip to main content

heddle_pack/store/pack/
compact_frame.rs

1// SPDX-License-Identifier: Apache-2.0
2
3use crate::store::Result;
4
5/// Compress one compact metadata frame with the measured lineage-solid policy.
6///
7/// Level 19 plus a 2^27-byte long-distance window matches the #1325 falsifier.
8/// Incompressible input remains raw so the pack reader's size discriminator is
9/// unambiguous. Builds without `zstd` retain the lossless compact encoding but
10/// store its frames raw.
11pub fn compress_compact_frame(data: &[u8]) -> Result<Vec<u8>> {
12    #[cfg(feature = "zstd")]
13    {
14        use std::io::Write;
15
16        let mut compressed = Vec::new();
17        let mut encoder = zstd::stream::write::Encoder::new(&mut compressed, 19)?;
18        encoder.window_log(27)?;
19        encoder.long_distance_matching(true)?;
20        encoder.include_checksum(true)?;
21        encoder.set_pledged_src_size(Some(data.len() as u64))?;
22        encoder.write_all(data)?;
23        encoder.finish()?;
24        if compressed.len() < data.len() {
25            return Ok(compressed);
26        }
27    }
28    Ok(data.to_vec())
29}
30
31#[cfg(all(test, feature = "zstd"))]
32mod tests {
33    use super::*;
34    use crate::store::pack::{decompress_pack_payload, has_zstd_magic};
35
36    #[test]
37    fn solid_compression_round_trips_and_carries_a_zstd_checksum() {
38        let input = b"directory version\n".repeat(32_768);
39        let compressed = compress_compact_frame(&input).unwrap();
40        assert!(has_zstd_magic(&compressed));
41        assert!(compressed.len() < input.len());
42        assert_eq!(
43            decompress_pack_payload(&compressed, input.len()).unwrap(),
44            input
45        );
46    }
47}