2 个版本
0.1.1 | 2024年6月23日 |
---|---|
0.1.0 | 2024年6月23日 |
#1717 在 开发工具
17KB
285 代码行
Cargo-Crate-Downloader
此项目允许您从crates.io下载单个Rust包的源代码,或下载整个crates.io到本地。我们提供库和可运行代码来实现这一点。
下载整个crates.io
对于测试和直接使用,您可以使用另一个二进制文件将单个包下载到目标目录
// For example: cargo run --bin download_one -- rusqlite 0.29.0
cargo run --bin download_one -- <name> <version_num>
我们提供了一个演示,帮助您学习如何下载包。
use std::fs::{create_dir, remove_dir_all};
use std::path::Path;
use downloader::Downloader;
use crate_downloader::{deal_with_crate, fetch_crate};
const CRATESDIR: &str = "./demo";
fn main() {
let name = "rand";
let version_num = "0.8.5";
// Main Process
println!("Processing crate {name}-v{version_num}");
remove_dir_all(CRATESDIR).unwrap_or_default(); // Delete tmp crates file directory
create_dir(Path::new(CRATESDIR)).unwrap_or_default(); // Crates file directory
let mut downloader = Downloader::builder()
.download_folder(Path::new(CRATESDIR))
.parallel_requests(1)
.build()
.expect("Fatal Error, build downloader fails!");
if let Err(e) =
fetch_crate( &mut downloader, CRATESDIR, &name, &version_num)
{
println!("Fetch fails: {}", e);
} else if let Err(e) = deal_with_crate(CRATESDIR, &name, &version_num) {
println!("Unzip fails: {}", e);
} else {
println!("Success. Check the directory ./{}", CRATESDIR);
}
}
下载整个crates.io
包版本信息基于我们的Cargo-Ecosystem-Monitor数据库。请参阅根目录中的指南。
在本项目中,我们将从crates.io(Cargo生态系统)下载并解压缩所有包的源代码。此过程可以中断并重新启动,因为我们支持断点执行。数据将存储在CRATESDIR
(默认为./on_process,参见代码以更改它)。
直接运行项目需要预先的数据库支持。请确保您已准备好这样做。
cargo run
依赖项
~10–22MB
~338K SLoC