#tar #cargo-toml #cargo #gzip #streaming-parser

crate_untar

流式读取 Cargo 发布的包格式(.crate 归档文件)

1 个版本 (0 个不稳定版本)

1.0.0-rc.12024 年 8 月 2 日

#297文件系统

Download history 92/week @ 2024-07-29

92 每月下载次数

Apache-2.0 OR MIT

38KB
667

此库允许检查 Cargo/crates.io 包的内容,需要在磁盘上写入任何临时文件,并且在大多数情况下也不需要在内存中保留文件。

它是一个用于压缩 tar 归档的流式解析器(.crate 文件)。此外,它可以执行正确性检查以检测格式不正确的包(例如,重复的 tar 路径、大小写不敏感文件系统上的模糊路径、指向 crate 外部的符号链接)。

use crate_untar::*;

// you'll need other libraries to download the .crate file and verify its cecksum
let mut archive = Unarchiver::new(std::fs::File::open("example.crate")?)?;
let mut tarball = TarballParser::new(&mut archive, "example", "1.0.0")?;

for res in tarball.entries() {
    let (path, file) = res?;
    // filter by path or file.len() if you need
    if path.extension() != Some("rs".as_ref()) {
        continue;
    }

    // process the file here if you want
    // The file implements io::Read too
    let vec = file.into_vec()?;
}

let parsed = tarball.finalize()?;

println!("{:#?}", parsed.cargo_toml);
println!("{:#?}", parsed.cargo_toml_orig);
println!("{:#?}", parsed.cargo_lock);
println!("{:#?}", parsed.cargo_vcs_info);

# Ok::<_, Box<dyn std::error::Error>>(())

依赖关系

~6–14MB
~193K SLoC