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 在 命令行工具
每月下载量 368
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
或类似的东西的文件夹中。这是为了确保在发生更改时再次执行构建脚本。
补丁格式
您可以使用 diff 或 git 创建补丁文件。重要的是文件路径是相对的,并且在依赖项内部。
使用由 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