diff --git a/src/archive/sevenz.rs b/src/archive/sevenz.rs index 2618209..e5266ee 100644 --- a/src/archive/sevenz.rs +++ b/src/archive/sevenz.rs @@ -171,11 +171,11 @@ where } /// List contents of `archive_path`, returning a vector of archive entries -pub fn list_archive( - archive_path: &Path, - password: Option<&[u8]>, -) -> Result>> { - let reader = fs::File::open(archive_path)?; +pub fn list_archive(reader: R, password: Option<&[u8]>) -> Result>> +where + R: Read + Seek, +{ + // let reader = fs::File::open(archive_path)?; let mut files = Vec::new(); diff --git a/src/commands/list.rs b/src/commands/list.rs index ef7a5f5..4a344a7 100644 --- a/src/commands/list.rs +++ b/src/commands/list.rs @@ -122,7 +122,10 @@ pub fn list_archive_contents( } } - Box::new(archive::sevenz::list_archive(archive_path, password)?) + let mut vec = vec![]; + io::copy(&mut reader, &mut vec)?; + + Box::new(archive::sevenz::list_archive(io::Cursor::new(vec), password)?) } Gzip | Bzip | Bzip3 | Lz4 | Lzma | Snappy | Zstd | Brotli => { unreachable!("Not an archive, should be validated before calling this function."); diff --git a/tests/integration.rs b/tests/integration.rs index b43bb08..9f870db 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1065,3 +1065,27 @@ fn fail_when_compressing_archive_as_the_second_extension() { .is_some()); } } + +#[test] +fn sevenz_list_should_not_failed() { + let temp_dir = tempdir().unwrap(); + let root_path = temp_dir.path(); + let src_files_path = root_path.join("src_files"); + fs::create_dir_all(&src_files_path).unwrap(); + + let archive = root_path.join("archive.7z.gz"); + crate::utils::cargo_bin() + .arg("compress") + .arg("--yes") + .arg(fs::File::create(src_files_path.join("README.md")).unwrap().path()) + .arg(&archive) + .assert() + .success(); + + crate::utils::cargo_bin() + .arg("list") + .arg("--yes") + .arg(&archive) + .assert() + .success(); +}