From 788809b8f30ffaabdda4ab63b34823f8fbff69aa Mon Sep 17 00:00:00 2001 From: Gabriel Simonetto Date: Tue, 5 Oct 2021 21:50:02 -0300 Subject: [PATCH] Make decompress command explicit - No subcommand given now calls the help menu - Also added docs for the short version of compress and decompress --- README.md | 12 +++++++++--- src/cli.rs | 23 ++++++++++++++++++----- src/lib.rs | 29 ++++++----------------------- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index e93b96f..fd98acf 100644 --- a/README.md +++ b/README.md @@ -28,17 +28,20 @@ Run `ouch` and pass compressed files as arguments. ```sh # Decompress 'a.zip' -ouch a.zip +ouch decompress a.zip + +# Also works with the short version +ouch d a.zip # Decompress multiple files -ouch a.zip b.tar.gz +ouch decompress a.zip b.tar.gz ``` You can redirect the decompression results to a folder with the `-o/--output` flag. ```sh # Create 'pictures' folder and decompress inside of it -ouch a.zip -o pictures +ouch decompress a.zip -o pictures ``` ### Compressing @@ -51,6 +54,9 @@ Accepts multiple files and folders, the **last** argument shall be the **output # Compress four files into 'archive.zip' ouch compress 1 2 3 4 archive.zip +# Also works with the short version +ouch c 1 2 3 4 archive.zip + # Compress folder and video into 'videos.tar.gz' ouch compress videos/ meme.mp4 videos.tar.gz diff --git a/src/cli.rs b/src/cli.rs index 2f8b499..0865124 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -98,7 +98,7 @@ pub fn parse_args_from(mut args: Vec) -> crate::Result { return Ok(ParsedArgs { command: Command::ShowVersion, flags: oof::Flags::default() }); } - let subcommands = &["c", "compress"]; + let subcommands = &["c", "compress", "d", "decompress"]; let mut flags_info = vec![flag!('y', "yes"), flag!('n', "no")]; let parsed_args = match oof::pop_subcommand(&mut args, subcommands) { @@ -117,8 +117,7 @@ pub fn parse_args_from(mut args: Vec) -> crate::Result { let command = Command::Compress { files, output_path }; ParsedArgs { command, flags } } - // Defaults to decompression when there is no subcommand - None => { + Some(&"d") | Some(&"decompress") => { flags_info.push(arg_flag!('o', "output")); if let Some(first_arg) = args.first() { @@ -140,6 +139,10 @@ pub fn parse_args_from(mut args: Vec) -> crate::Result { let command = Command::Decompress { files, output_folder }; ParsedArgs { command, flags } } + // Defaults to help when there is no subcommand + None => { + return Ok(ParsedArgs { command: Command::ShowHelp, flags: oof::Flags::default() }); + } _ => unreachable!("You should match each subcommand passed."), }; @@ -163,18 +166,28 @@ mod tests { #[test] fn test_cli_commands() { + assert_eq!(test_cli("").unwrap().command, Command::ShowHelp); assert_eq!(test_cli("--help").unwrap().command, Command::ShowHelp); assert_eq!(test_cli("--version").unwrap().command, Command::ShowVersion); assert_eq!(test_cli("--version").unwrap().flags, oof::Flags::default()); assert_eq!( - test_cli("foo.zip bar.zip").unwrap().command, + test_cli("decompress foo.zip bar.zip").unwrap().command, + Command::Decompress { files: vec!["foo.zip".into(), "bar.zip".into()], output_folder: None } + ); + assert_eq!( + test_cli("d foo.zip bar.zip").unwrap().command, Command::Decompress { files: vec!["foo.zip".into(), "bar.zip".into()], output_folder: None } ); assert_eq!( test_cli("compress foo bar baz.zip").unwrap().command, Command::Compress { files: vec!["foo".into(), "bar".into()], output_path: "baz.zip".into() } ); + assert_eq!( + test_cli("c foo bar baz.zip").unwrap().command, + Command::Compress { files: vec!["foo".into(), "bar".into()], output_path: "baz.zip".into() } + ); assert_eq!(test_cli("compress").unwrap_err(), Error::MissingArgumentsForCompression); + // assert_eq!(test_cli("decompress").unwrap_err(), Error::MissingArgumentsForCompression); // TODO } #[test] @@ -184,7 +197,7 @@ mod tests { assert_eq!(test_cli("--version").unwrap().flags, oof::Flags::default()); assert_eq!( - test_cli("foo --yes bar --output folder").unwrap().flags, + test_cli("decompress foo --yes bar --output folder").unwrap().flags, oof::Flags { boolean_flags: vec!["yes"].into_iter().collect(), argument_flags: vec![("output", OsString::from("folder"))].into_iter().collect(), diff --git a/src/lib.rs b/src/lib.rs index 67db5e9..a2434da 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -35,38 +35,21 @@ lazy_static! { fn help_command() { use utils::colors::*; - /* - ouch - Obvious Unified Compressed files Helper - - USAGE: - ouch Decompresses files. - - ouch compress OUTPUT.EXT Compresses files into OUTPUT.EXT, - where EXT must be a supported format. - - FLAGS: - -h, --help Display this help information. - -y, --yes Skip overwrite questions. - -n, --no Skip overwrite questions. - --version Display version information. - - SPECIFIC FLAGS: - -o, --output FOLDER_PATH When decompressing, to decompress files to - another folder. - - Visit https://github.com/vrmiguel/ouch for more usage examples. - */ println!( "\ {cyan}ouch{reset} - Obvious Unified Compression files Helper {cyan}USAGE:{reset} - {green}ouch {magenta}{reset} Decompresses files. + {green}ouch decompress {magenta}{reset} Decompresses files. {green}ouch compress {magenta} OUTPUT.EXT{reset} Compresses files into {magenta}OUTPUT.EXT{reset}, where {magenta}EXT{reset} must be a supported format. +{cyan}ALIASES:{reset} + {green}d decompress {reset} + {green}c compress {reset} + {cyan}FLAGS:{reset} {yellow}-h{white}, {yellow}--help{reset} Display this help information. {yellow}-y{white}, {yellow}--yes{reset} Skip overwrite questions. @@ -77,7 +60,7 @@ fn help_command() { {yellow}-o{reset}, {yellow}--output{reset} FOLDER_PATH When decompressing, to decompress files to another folder. -Visit https://github.com/vrmiguel/ouch for more usage examples.", +Visit https://github.com/ouch-org/ouch for more usage examples.", magenta = magenta(), white = white(), green = green(),