Stop keeping track of the names of unpacked files

This commit is contained in:
Vinícius R. Miguel 2023-01-05 15:52:21 -03:00
parent 60bbf438fc
commit 3bb0e57ed4
3 changed files with 12 additions and 13 deletions

View File

@ -22,15 +22,14 @@ use crate::{
/// Unpacks the archive given by `archive` into the folder given by `into`. /// Unpacks the archive given by `archive` into the folder given by `into`.
/// Assumes that output_folder is empty /// Assumes that output_folder is empty
pub fn unpack_archive(reader: Box<dyn Read>, output_folder: &Path, quiet: bool) -> crate::Result<Vec<PathBuf>> { pub fn unpack_archive(reader: Box<dyn Read>, output_folder: &Path, quiet: bool) -> crate::Result<usize> {
assert!(output_folder.read_dir().expect("dir exists").count() == 0); assert!(output_folder.read_dir().expect("dir exists").count() == 0);
let mut archive = tar::Archive::new(reader); let mut archive = tar::Archive::new(reader);
let mut files_unpacked = vec![]; let mut files_unpacked = 0;
for file in archive.entries()? { for file in archive.entries()? {
let mut file = file?; let mut file = file?;
let file_path = output_folder.join(file.path()?);
file.unpack_in(output_folder)?; file.unpack_in(output_folder)?;
// This is printed for every file in the archive and has little // This is printed for every file in the archive and has little
@ -45,7 +44,7 @@ pub fn unpack_archive(reader: Box<dyn Read>, output_folder: &Path, quiet: bool)
file.size().bytes(), file.size().bytes(),
); );
files_unpacked.push(file_path); files_unpacked += 1;
} }
} }

View File

@ -29,13 +29,13 @@ use crate::{
/// Unpacks the archive given by `archive` into the folder given by `output_folder`. /// Unpacks the archive given by `archive` into the folder given by `output_folder`.
/// Assumes that output_folder is empty /// Assumes that output_folder is empty
pub fn unpack_archive<R>(mut archive: ZipArchive<R>, output_folder: &Path, quiet: bool) -> crate::Result<Vec<PathBuf>> pub fn unpack_archive<R>(mut archive: ZipArchive<R>, output_folder: &Path, quiet: bool) -> crate::Result<usize>
where where
R: Read + Seek, R: Read + Seek,
{ {
assert!(output_folder.read_dir().expect("dir exists").count() == 0); assert!(output_folder.read_dir().expect("dir exists").count() == 0);
let mut unpacked_files = Vec::with_capacity(archive.len()); let mut unpacked_files = 0;
for idx in 0..archive.len() { for idx in 0..archive.len() {
let mut file = archive.by_index(idx)?; let mut file = archive.by_index(idx)?;
@ -87,7 +87,7 @@ where
#[cfg(unix)] #[cfg(unix)]
unix_set_permissions(&file_path, &file)?; unix_set_permissions(&file_path, &file)?;
unpacked_files.push(file_path); unpacked_files += 1;
} }
Ok(unpacked_files) Ok(unpacked_files)

View File

@ -48,7 +48,7 @@ pub fn decompress_file(
}] = formats.as_slice() }] = formats.as_slice()
{ {
let zip_archive = zip::ZipArchive::new(reader)?; let zip_archive = zip::ZipArchive::new(reader)?;
let files = if let ControlFlow::Continue(files) = smart_unpack( let files_unpacked = if let ControlFlow::Continue(files) = smart_unpack(
|output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir, quiet), |output_dir| crate::archive::zip::unpack_archive(zip_archive, output_dir, quiet),
output_dir, output_dir,
&output_file_path, &output_file_path,
@ -67,7 +67,7 @@ pub fn decompress_file(
accessible, accessible,
"Successfully decompressed archive in {} ({} files).", "Successfully decompressed archive in {} ({} files).",
nice_directory_display(output_dir), nice_directory_display(output_dir),
files.len() files_unpacked
); );
return Ok(()); return Ok(());
@ -108,7 +108,7 @@ pub fn decompress_file(
io::copy(&mut reader, &mut writer)?; io::copy(&mut reader, &mut writer)?;
vec![output_file_path] 1
} }
Tar => { Tar => {
if let ControlFlow::Continue(files) = smart_unpack( if let ControlFlow::Continue(files) = smart_unpack(
@ -157,7 +157,7 @@ pub fn decompress_file(
"Successfully decompressed archive in {}.", "Successfully decompressed archive in {}.",
nice_directory_display(output_dir) nice_directory_display(output_dir)
); );
info!(accessible, "Files unpacked: {}", files_unpacked.len()); info!(accessible, "Files unpacked: {}", files_unpacked);
Ok(()) Ok(())
} }
@ -168,11 +168,11 @@ pub fn decompress_file(
/// output_dir named after the archive (given by `output_file_path`) /// output_dir named after the archive (given by `output_file_path`)
/// Note: This functions assumes that `output_dir` exists /// Note: This functions assumes that `output_dir` exists
fn smart_unpack( fn smart_unpack(
unpack_fn: impl FnOnce(&Path) -> crate::Result<Vec<PathBuf>>, unpack_fn: impl FnOnce(&Path) -> crate::Result<usize>,
output_dir: &Path, output_dir: &Path,
output_file_path: &Path, output_file_path: &Path,
question_policy: QuestionPolicy, question_policy: QuestionPolicy,
) -> crate::Result<ControlFlow<(), Vec<PathBuf>>> { ) -> crate::Result<ControlFlow<(), usize>> {
assert!(output_dir.exists()); assert!(output_dir.exists());
let temp_dir = tempfile::tempdir_in(output_dir)?; let temp_dir = tempfile::tempdir_in(output_dir)?;
let temp_dir_path = temp_dir.path(); let temp_dir_path = temp_dir.path();