rustrust-cargo

Forcing 2 different versions of a crate when patching


I want to patch getrandom crate in my workspace, with 0.2.12 version as following:

[patch.crates-io]
getrandom = { git = "https://github.com/madsim-rs/getrandom.git", rev = "8ffd43e" }

Before trying to patch, my Cargo.lock had the 0.2.15 version of this crate. When I patched it and tried to run cargo update -p getrandom, I encountered a problem:

warning: Patch `getrandom v0.2.12 (https://github.com/madsim-rs/getrandom.git?rev=8ffd43e#8ffd43e6)` was not used in the crate graph.

When I played around with the Cargo.lock here is what I got eventually:

 ... required by package `libp2p-gossipsub v0.47.0`
    ... which satisfies dependency `libp2p-gossipsub = "^0.47.0"` (locked to 0.47.0) of package `libp2p v0.54.1`
    ... which satisfies dependency `libp2p = "^0.54"` (locked to 0.54.1) of package `my_project v0.1.0 (/path/to/my_project)`
versions that meet the requirements `^0.2.15` are: 0.2.15

As far as I understand, libp2p-gossipsub crate which is imported by the libp2p crate requires 0.2.15 version of getrandom.

How can I resolve this issue? I am OK to having 2 different versions of getrandom in my codebase, and not applying patch to libp2p.


Solution

  • I want to patch getrandom crate in my workspace, with 0.2.12 version as following: …

    Before trying to patch, my Cargo.lock had the 0.2.15 version of this crate.

    libp2p-gossipsub crate which is imported by the libp2p crate requires 0.2.15 version of getrandom.

    In this situation, you must provide patched code which claims in its Cargo.toml to be version 0.2.15 or newer. There is no way to override Cargo in this matter.

    I am OK to having 2 different versions of getrandom in my codebase

    There is no way to override Cargo’s one-major-version policy, either; in order to add a different minor version you must give it a different package name.