2 个版本

0.1.1 2022年6月7日
0.1.0 2022年6月7日

#1151 in 开发工具

Download history 130/week @ 2024-04-19 116/week @ 2024-04-26 209/week @ 2024-05-03 147/week @ 2024-05-10 153/week @ 2024-05-17 110/week @ 2024-05-24 120/week @ 2024-05-31 100/week @ 2024-06-07 85/week @ 2024-06-14 128/week @ 2024-06-21 194/week @ 2024-06-28 221/week @ 2024-07-05 205/week @ 2024-07-12 176/week @ 2024-07-19 169/week @ 2024-07-26 154/week @ 2024-08-02

741 每月下载次数
用于 viewy

MIT 协议

5KB
77

git-download

Crates.io documentation CI

微服务架构需要共享服务定义文件,如协议缓冲区,以便客户端访问服务器。

为了共享这些文件,可以选择原始的复制粘贴方法,但这很容易受到人为错误的影响。

第二种方法是现在广泛接受的protodep,然而,这并不是 Rust 程序员的最佳解决方案

因为我们,Rust 程序员,希望像这样在 build.rs 中下载文件。

// build.rs

git_download::repo("https://github.com/akiradeveloper/lol")
    .branch_name("v0.9.1")
    .add_file("lol-core/proto/lol-core.proto", "proto/lol.proto")
    .exec()?;

tonic_build::configure()
    .build_server(false)
    .compile(&["lol.proto"], &["proto"])?;

使用方法

[build-dependencies]
git-download = "0.1"

实现

内部,git-download 使用 sparse-checkout 来下载指定的文件而不是整个仓库。

下载的文件首先被放在临时目录中,该目录由 tempfile crate 创建。在 Linux 上,该目录位于 tmpfs 中,这是一个内存文件系统。因此,在将文件从 tmpfs 复制到目标路径之前,不会发生磁盘写入。我们可以通过比较复制前的内容来避免写入未更改的内容。

依赖

~6–16MB
~216K SLoC