Awesome
cargo-override
Quickly override dependencies using the [patch]
section of Cargo.toml
s.
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 patch
[!NOTE]
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.
Installation
First, ensure that you have a recent version of cargo
installed.
Cargo
cargo override
can then be installed with cargo
.
cargo install cargo-override --locked
Nix ❄️
You can try cargo override
in your shell with flakes enabled, using:
nix shell github:eopb/cargo-override
Usage
Overriding dependencies with a local version
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" }
Overriding dependencies with a version from Git
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.