#patch #cargo #dependencies #cargo-subcommand #cargo-toml #patchfile

bin+lib cargo-patch

Cargo 子命令,用于使用补丁文件修补依赖项

29 个版本

0.3.2 2023年7月30日
0.3.0 2023年1月8日
0.2.9 2022年11月21日
0.2.3 2022年7月24日
0.1.7 2020年6月6日

#1048命令行工具

Download history 43/week @ 2024-03-13 31/week @ 2024-03-20 40/week @ 2024-03-27 25/week @ 2024-04-03 28/week @ 2024-04-10 85/week @ 2024-04-17 87/week @ 2024-04-24 67/week @ 2024-05-01 55/week @ 2024-05-08 29/week @ 2024-05-15 85/week @ 2024-05-22 72/week @ 2024-05-29 84/week @ 2024-06-05 40/week @ 2024-06-12 67/week @ 2024-06-19 170/week @ 2024-06-26

每月下载量 368

MIT 许可证

29KB
514 代码行

cargo-patch

Cargo-Patch 是一个 Cargo 子命令,允许使用补丁文件修补依赖项。

安装

只需运行

cargo install cargo-patch

当通过 build.rs 文件修补时,这不是必需的

用法

要修补一个依赖项,需要将以下内容添加到 Cargo.toml

[package.metadata.patch.serde]
version = "1.0"
patches = [
    "test.patch"
]

它指定了要修补的依赖项(在本例中为 serde)以及要应用的一个或多个补丁文件。运行

cargo patch

将下载依赖项部分中指定的 serde 包到 target/patch 文件夹并应用给定的补丁。要使用修补的版本,必须使用 replace 覆盖依赖项,如下所示

[patch.crates-io]
serde = { path = './target/patch/serde-1.0.110' }

除了运行 cargo patch,还可以添加一个 build.rs 文件,如下所示

fn main() {
    println!("cargo:rerun-if-changed=Cargo.toml");
    println!("cargo:rerun-if-changed=patches/");
    cargo_patch::patch().expect("Failed while patching");
}

要使其生效,请将 cargo-patch 库添加到 build-dependencies

[build-dependencies]
cargo-patch = "0.3"

请注意,然而,所有补丁都应该放在一个名为 patches 或类似的东西的文件夹中。这是为了确保在发生更改时再次执行构建脚本。

补丁格式

您可以使用 diffgit 创建补丁文件。重要的是文件路径是相对的,并且在依赖项内部。

使用由 GitHub 拉取请求生成的 diff 文件

[package.metadata.patch.serde]
version = "1.0"
patches = [
    { path = "generatedByGithub.patch", source = "GithubPrDiff" },
    { path = "generatedByGithub2.patch", source = "GithubPrDiff" },
    "test.patch",
    "test2.patch"
]

限制

由于子命令无法拦截构建过程,因此只能修补二进制包的依赖项。

依赖项

~51–83MB
~1.5M SLoC