diff --git a/src/archive/tar.rs b/src/archive/tar.rs index f7f3763..81f6694 100644 --- a/src/archive/tar.rs +++ b/src/archive/tar.rs @@ -22,7 +22,7 @@ use crate::{ /// Unpacks the archive given by `archive` into the folder given by `into`. /// Assumes that output_folder is empty -pub fn unpack_archive(reader: Box, output_folder: &Path) -> crate::Result> { +pub fn unpack_archive(reader: Box, output_folder: &Path, quiet: bool) -> crate::Result> { assert!(output_folder.read_dir().expect("dir exists").count() == 0); let mut archive = tar::Archive::new(reader); @@ -37,15 +37,16 @@ pub fn unpack_archive(reader: Box, output_folder: &Path) -> crate::Res // importance for most users, but would generate lots of // spoken text for users using screen readers, braille displays // and so on - - info!( - inaccessible, - "{:?} extracted. ({})", - utils::strip_cur_dir(&output_folder.join(file.path()?)), - format_size(file.size(), DECIMAL), - ); + if !quiet { + info!( + inaccessible, + "{:?} extracted. ({})", + utils::strip_cur_dir(&output_folder.join(file.path()?)), + format_size(file.size(), DECIMAL), + ); files_unpacked.push(file_path); + } } Ok(files_unpacked) @@ -85,6 +86,7 @@ pub fn build_archive_from_paths( input_filenames: &[PathBuf], output_path: &Path, writer: W, + quiet: bool, file_visibility_policy: FileVisibilityPolicy, ) -> crate::Result where @@ -118,7 +120,9 @@ where // little importance for most users, but would generate lots of // spoken text for users using screen readers, braille displays // and so on - info!(inaccessible, "Compressing '{}'.", utils::to_utf(path)); + if !quiet { + info!(inaccessible, "Compressing '{}'.", utils::to_utf(path)); + } if path.is_dir() { builder.append_dir(path, path)?; diff --git a/src/archive/zip.rs b/src/archive/zip.rs index 585acf7..917aaff 100644 --- a/src/archive/zip.rs +++ b/src/archive/zip.rs @@ -29,7 +29,7 @@ use crate::{ /// Unpacks the archive given by `archive` into the folder given by `output_folder`. /// Assumes that output_folder is empty -pub fn unpack_archive(mut archive: ZipArchive, output_folder: &Path) -> crate::Result> +pub fn unpack_archive(mut archive: ZipArchive, output_folder: &Path, quiet: bool) -> crate::Result> where R: Read + Seek, { @@ -54,7 +54,9 @@ where // importance for most users, but would generate lots of // spoken text for users using screen readers, braille displays // and so on - info!(inaccessible, "File {} extracted to \"{}\"", idx, file_path.display()); + if !quiet { + info!(inaccessible, "File {} extracted to \"{}\"", idx, file_path.display()); + } fs::create_dir_all(&file_path)?; } _is_file @ false => { @@ -66,12 +68,14 @@ where let file_path = strip_cur_dir(file_path.as_path()); // same reason is in _is_dir: long, often not needed text - info!( - inaccessible, - "{:?} extracted. ({})", - file_path.display(), - format_size(file.size(), DECIMAL), - ); + if !quiet { + info!( + inaccessible, + "{:?} extracted. ({})", + file_path.display(), + format_size(file.size(), DECIMAL), + ); + } let mut output_file = fs::File::create(file_path)?; io::copy(&mut file, &mut output_file)?; @@ -134,6 +138,7 @@ pub fn build_archive_from_paths( input_filenames: &[PathBuf], output_path: &Path, writer: W, + quiet: bool, file_visibility_policy: FileVisibilityPolicy, ) -> crate::Result where @@ -185,7 +190,9 @@ where // little importance for most users, but would generate lots of // spoken text for users using screen readers, braille displays // and so on - info!(inaccessible, "Compressing '{}'.", to_utf(path)); + if !quiet { + info!(inaccessible, "Compressing '{}'.", to_utf(path)); + } let metadata = match path.metadata() { Ok(metadata) => metadata, diff --git a/src/commands/compress.rs b/src/commands/compress.rs index 1936036..c38b869 100644 --- a/src/commands/compress.rs +++ b/src/commands/compress.rs @@ -32,6 +32,7 @@ pub fn compress_files( extensions: Vec, output_file: fs::File, output_path: &Path, + quiet: bool, question_policy: QuestionPolicy, file_visibility_policy: FileVisibilityPolicy, ) -> crate::Result { @@ -74,7 +75,7 @@ pub fn compress_files( io::copy(&mut reader, &mut writer)?; } Tar => { - archive::tar::build_archive_from_paths(&files, output_path, &mut writer, file_visibility_policy)?; + archive::tar::build_archive_from_paths(&files, output_path, &mut writer, quiet, file_visibility_policy)?; writer.flush()?; } Zip => { @@ -88,7 +89,7 @@ pub fn compress_files( let mut vec_buffer = Cursor::new(vec![]); - archive::zip::build_archive_from_paths(&files, output_path, &mut vec_buffer, file_visibility_policy)?; + archive::zip::build_archive_from_paths(&files, output_path, &mut vec_buffer, quiet, file_visibility_policy)?; vec_buffer.rewind()?; io::copy(&mut vec_buffer, &mut writer)?; } diff --git a/src/commands/decompress.rs b/src/commands/decompress.rs index 937902d..d45307e 100644 --- a/src/commands/decompress.rs +++ b/src/commands/decompress.rs @@ -30,6 +30,7 @@ pub fn decompress_file( output_dir: &Path, output_file_path: PathBuf, question_policy: QuestionPolicy, + quiet: bool ) -> crate::Result<()> { assert!(output_dir.exists()); let reader = fs::File::open(input_file_path)?; @@ -48,7 +49,7 @@ pub fn decompress_file( { let zip_archive = zip::ZipArchive::new(reader)?; let files = if let ControlFlow::Continue(files) = smart_unpack( - |output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir), + |output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir, quiet), output_dir, &output_file_path, question_policy, @@ -111,7 +112,7 @@ pub fn decompress_file( } Tar => { if let ControlFlow::Continue(files) = smart_unpack( - |output_dir| crate::archive::tar::unpack_archive(reader, output_dir), + |output_dir| crate::archive::tar::unpack_archive(reader, output_dir, quiet), output_dir, &output_file_path, question_policy, @@ -135,7 +136,7 @@ pub fn decompress_file( let zip_archive = zip::ZipArchive::new(io::Cursor::new(vec))?; if let ControlFlow::Continue(files) = smart_unpack( - |output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir), + |output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir, quiet), output_dir, &output_file_path, question_policy, diff --git a/src/commands/mod.rs b/src/commands/mod.rs index d4bfea3..27bc1ac 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -164,6 +164,7 @@ pub fn run( formats, output_file, &output_path, + args.quiet, question_policy, file_visibility_policy, ); @@ -244,7 +245,7 @@ pub fn run( for ((input_path, formats), file_name) in files.iter().zip(formats).zip(output_paths) { let output_file_path = output_dir.join(file_name); // Path used by single file format archives - decompress_file(input_path, formats, &output_dir, output_file_path, question_policy)?; + decompress_file(input_path, formats, &output_dir, output_file_path, question_policy, args.quiet)?; } } Subcommand::List { archives: files, tree } => { diff --git a/src/opts.rs b/src/opts.rs index 7adc014..331eae3 100644 --- a/src/opts.rs +++ b/src/opts.rs @@ -29,6 +29,10 @@ pub struct Opts { #[arg(short = 'H', long)] pub hidden: bool, + /// Silences output + #[arg(short = 'Q', long)] + pub quiet: bool, + /// Ignores files matched by git's ignore files #[arg(short = 'g', long)] pub gitignore: bool,