this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(7z): add --level compression level support

+42 -5
+42 -5
src/backends/sevenz.rs
··· 1 - use crate::utils::{CmprssInput, CmprssOutput, CommonArgs, Compressor, ExtractedTarget, Result}; 1 + use crate::utils::{ 2 + CmprssInput, CmprssOutput, CommonArgs, CompressionLevelValidator, Compressor, 3 + DefaultCompressionValidator, ExtractedTarget, LevelArgs, Result, 4 + }; 2 5 use anyhow::bail; 3 6 use clap::Args; 4 7 use sevenz_rust2::{ 5 8 ArchiveEntry, ArchiveReader, ArchiveWriter, Password, decompress, decompress_file, 9 + encoder_options::Lzma2Options, 6 10 }; 7 11 use std::fs::File; 8 12 use std::io::{self, Seek, SeekFrom, Write}; ··· 13 17 pub struct SevenZArgs { 14 18 #[clap(flatten)] 15 19 pub common_args: CommonArgs, 20 + 21 + #[clap(flatten)] 22 + pub level_args: LevelArgs, 16 23 } 17 24 18 - #[derive(Default, Clone)] 19 - pub struct SevenZ {} 25 + #[derive(Clone)] 26 + pub struct SevenZ { 27 + pub compression_level: i32, 28 + } 29 + 30 + impl Default for SevenZ { 31 + fn default() -> Self { 32 + SevenZ { 33 + compression_level: DefaultCompressionValidator.default_level(), 34 + } 35 + } 36 + } 20 37 21 38 impl SevenZ { 22 - pub fn new(_args: &SevenZArgs) -> SevenZ { 23 - SevenZ {} 39 + pub fn new(args: &SevenZArgs) -> SevenZ { 40 + SevenZ { 41 + compression_level: args.level_args.resolve(&DefaultCompressionValidator), 42 + } 24 43 } 25 44 26 45 fn compress_to_file<W: Write + Seek>(&self, input: CmprssInput, writer: W) -> Result { 27 46 let mut aw = ArchiveWriter::new(writer)?; 47 + let lzma = Lzma2Options::from_level(self.compression_level as u32); 48 + aw.set_content_methods(vec![lzma.into()]); 28 49 29 50 match input { 30 51 CmprssInput::Path(paths) => { ··· 215 236 fn test_sevenz_default_compression() -> Result { 216 237 let compressor = SevenZ::default(); 217 238 test_compression(&compressor) 239 + } 240 + 241 + #[test] 242 + fn test_sevenz_fast_compression() -> Result { 243 + let fast_compressor = SevenZ { 244 + compression_level: 1, 245 + }; 246 + test_compression(&fast_compressor) 247 + } 248 + 249 + #[test] 250 + fn test_sevenz_best_compression() -> Result { 251 + let best_compressor = SevenZ { 252 + compression_level: 9, 253 + }; 254 + test_compression(&best_compressor) 218 255 } 219 256 220 257 #[test]