An open API service indexing awesome lists of open source software.

https://github.com/eopb/cargo-override

The quickest way to override dependencies with Cargo
https://github.com/eopb/cargo-override

Last synced: over 1 year ago
JSON representation

The quickest way to override dependencies with Cargo

Awesome Lists containing this project

README

          

# cargo-override

[![License](https://img.shields.io/crates/l/cargo-override.svg)](https://crates.io/crates/cargo-override)
[![Latest version](https://img.shields.io/crates/v/cargo-override.svg)](https://crates.io/crates/cargo-override)
[![downloads-badge](https://img.shields.io/crates/d/cargo-override.svg)](https://crates.io/crates/cargo-override)

Quickly [override dependencies](https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html) 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:

```toml
[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`:

```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`:

```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.