From f21883170b05ed93a900153439c01a6706c2da48 Mon Sep 17 00:00:00 2001 From: figsoda Date: Sun, 19 Mar 2023 15:04:27 -0400 Subject: [PATCH 1/4] implement `--fast` and `--slow` --- src/cli/args.rs | 12 +++++++++++- src/commands/mod.rs | 10 +++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/cli/args.rs b/src/cli/args.rs index 1de90beff..266432fab 100644 --- a/src/cli/args.rs +++ b/src/cli/args.rs @@ -61,8 +61,18 @@ pub enum Subcommand { output: PathBuf, /// Compression level, applied to all formats - #[arg(short, long)] + #[arg(short, long, group = "compression-level")] level: Option, + + /// Fastest compression level possible, + /// conflicts with --level and --slow + #[arg(long, group = "compression-level")] + fast: bool, + + /// Slowest (and best) compression level possible, + /// conflicts with --level and --fast + #[arg(long, group = "compression-level")] + slow: bool, }, /// Decompresses one or more files, optionally into another folder #[command(visible_alias = "d")] diff --git a/src/commands/mod.rs b/src/commands/mod.rs index a4a3c8239..fdf14b367 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -45,6 +45,8 @@ pub fn run( files, output: output_path, level, + fast, + slow, } => { // After cleaning, if there are no input files left, exit if files.is_empty() { @@ -81,7 +83,13 @@ pub fn run( args.quiet, question_policy, file_visibility_policy, - level, + if fast { + Some(0) + } else if slow { + Some(i16::MAX) + } else { + level + }, ); if let Ok(true) = compress_result { From 83271f038e70f3c26ee095b603a242f122af8a46 Mon Sep 17 00:00:00 2001 From: figsoda Date: Sun, 19 Mar 2023 15:07:44 -0400 Subject: [PATCH 2/4] add changelog entry --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 032c17bf7..ba185a82b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,12 @@ Categories Used: ## [Unreleased](https://github.com/ouch-org/ouch/compare/0.4.1...HEAD) +### New Features + +- Add flags to configure the compression level + - `--level` to precisely set the compression level [\#372](https://github.com/ouch-org/ouch/pull/372) ([xgdgsc](https://github.com/xgdgsc)) + - `--fast` and `--slow` [\#374](https://github.com/ouch-org/ouch/pull/374) ([figsoda](https://github.com/figsoda)) + ### Improvements - Multi-threaded compression for gzip and snappy using gzp [\#348](https://github.com/ouch-org/ouch/pull/348) ([figsoda](https://github.com/figsoda)) From 499e2ea5fdf1f68d5211c7912b758d09890fb974 Mon Sep 17 00:00:00 2001 From: figsoda Date: Sun, 19 Mar 2023 15:32:54 -0400 Subject: [PATCH 3/4] extract `level` to a variable --- src/commands/mod.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/commands/mod.rs b/src/commands/mod.rs index fdf14b367..bfcd9f9eb 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -75,6 +75,14 @@ pub fn run( None => return Ok(()), }; + let level = if fast { + Some(0) // Lowest level of compression + } else if slow { + Some(i16::MAX) // Highest level of compression + } else { + level + }; + let compress_result = compress_files( files, formats, @@ -83,13 +91,7 @@ pub fn run( args.quiet, question_policy, file_visibility_policy, - if fast { - Some(0) - } else if slow { - Some(i16::MAX) - } else { - level - }, + level, ); if let Ok(true) = compress_result { From 8d77478b7395c40664a88e16b6e7c83a20918257 Mon Sep 17 00:00:00 2001 From: figsoda Date: Sun, 19 Mar 2023 15:33:10 -0400 Subject: [PATCH 4/4] increase compression level of `--fast` from 0 to 1 --- src/commands/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/mod.rs b/src/commands/mod.rs index bfcd9f9eb..2d741406c 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -76,7 +76,7 @@ pub fn run( }; let level = if fast { - Some(0) // Lowest level of compression + Some(1) // Lowest level of compression } else if slow { Some(i16::MAX) // Highest level of compression } else {