Merge branch 'main' into fix-count-when-quiet

This commit is contained in:
João Marcos 2025-05-17 13:02:26 -03:00 committed by GitHub
commit 2f92ef2c57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 33 additions and 7 deletions

View File

@ -32,6 +32,7 @@ Categories Used:
### Bug Fixes
- Fix tar extraction count when --quiet [\#824](https://github.com/ouch-org/ouch/pull/824) ([marcospb19](https://github.com/marcospb19))
- Fix 7z BadSignature error when compressing and then listing [\#819](https://github.com/ouch-org/ouch/pull/819) ([tommady](https://github.com/tommady))
### Tweaks

View File

@ -171,12 +171,10 @@ where
}
/// List contents of `archive_path`, returning a vector of archive entries
pub fn list_archive(
archive_path: &Path,
password: Option<&[u8]>,
) -> Result<impl Iterator<Item = crate::Result<FileInArchive>>> {
let reader = fs::File::open(archive_path)?;
pub fn list_archive<R>(reader: R, password: Option<&[u8]>) -> Result<impl Iterator<Item = crate::Result<FileInArchive>>>
where
R: Read + Seek,
{
let mut files = Vec::new();
let entry_extract_fn = |entry: &SevenZArchiveEntry, _: &mut dyn Read, _: &PathBuf| {

View File

@ -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.");

View File

@ -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();
}