#下载 #生态系统 #I/O #单个 #源代码 #本地 #代码

bin+lib crate_downloader

此项目允许您从crates.io下载单个Rust包的源代码,或下载整个crates.io到本地。我们提供库和可运行代码来实现这一点。

2 个版本

0.1.1 2024年6月23日
0.1.0 2024年6月23日

#1717开发工具

MIT/ApacheLGPL-3.0-or-later

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