Cargo-Patch
is a Cargo Subcommand which allows
patching dependencies using patch files.
Simply run:
cargo install cargo-patch
To patch a dependency one has to add the following
to Cargo.toml
:
[package.metadata.patch.serde]
version = "1.0"
patches = [
"test.patch"
]
It specifies which dependency to patch (in this case serde) and one or more patchfiles to apply. Running:
cargo patch
will download the serde package specified in the
dependency section to the target/patch
folder
and apply the given patches. To use the patched
version one has to override the dependency using
replace
like this
[patch.crates-io]
serde = { path = './target/patch/serde-1.0.110' }
You can either use diff or git to create patch files. Important is that file paths are relative and inside the dependency.
[package.metadata.patch.serde]
version = "1.0"
patches = [
{ path = "generatedByGithub.patch", source = "GithubPrDiff" },
{ path = "generatedByGithub2.patch", source = "GithubPrDiff" },
"test.patch",
"test2.patch"
]
It's only possible to patch dependencies of binary crates as it is not possible for a subcommand to intercept the build process.