Quickly override dependencies using the [patch] section of Cargo.tomls.
This plugin adds a new cargo subcommand, cargo override, which makes it trivial to patch dependencies with custom local copies, or versions from Git.
cargo override infers a number of things you would otherwise need to be checked manually:
[patch.crates-io]
# ^^^^^^^^^ The correct registry for this dependency
anyhow = { path = "../anyhow" }
# ^^^^^^^^^^^^^^^^^ A crate called "anyhow" is exposed at this source
#^^^^^ The name of the crate to patch
# ^^^^^^^^^
# The version of anyhow exposed here meets, the requirement
# we set in our `Cargo.toml`, so it will be valid as a patchNote
cargo-override is still in alpha so there may be some rough edges.
Please let us know if you experience bugs or find areas that can be improved, even if the issue is minor.
First, ensure that you have a recent version of cargo installed.
cargo override can then be installed with cargo.
cargo install cargo-override --locked
You can try cargo override in your shell with flakes enabled, using:
nix shell github:eopb/cargo-override
To override a dependency with a local copy, use --path.
For example, if the relative path ../anyhow contains a modified copy of the anyhow crate:
cargo override --path ../anyhow
As a result, a patch similar to this one would be appended to your Cargo.toml:
[patch.crates-io]
anyhow = { path = "../anyhow" }To override a dependency with a Git source, use --git.
For example, if https://github.com/dtolnay/anyhow contains a new release of the anyhow crate,
that is not yet on crates.io:
cargo override --git https://github.com/dtolnay/anyhow
As a result, a patch similar to this one would be appended to your Cargo.toml:
[patch.crates-io]
anyhow = { git = "https://github.com/dtolnay/anyhow" }Additionally, the flags --branch, --tag and --rev can be used to source the repository at a specific, branch, tag or Git revision, respectively.