rust 如何使用patch.crates-io覆盖两个不同版本的crate的Cargo crate副本?

1sbrub3j  于 2023-10-20  发布在  Go
关注(0)|答案(1)|浏览(158)

我试图修补有问题的板条箱,这是间接包括板条箱,我在我的项目包括。但问题是,我看到两个不同的板条箱使用两个不同版本的有问题的板条箱。使用patch.crates-io,我可以只修补一个版本的有问题的crate。
为了解释我的问题,下面是代码说明。
假设我有一个名为“myproject”的项目,其中包括Crate“A”和Crate“B”。板条箱'A'和板条箱'B'都包括板条箱'C',但有两个不同的版本(比如0.1.1和0.2.2)。但是crate 'C'需要一些定制来修复一些影响我项目的问题。在制作了两个版本的本地副本后,我做了一些修复,现在我想用如下的patch.crates-io更新我的项目。但我只能提供一个版本的板条箱'C'的补丁。
在myproject.toml中

[patch.crates-io]
C = { version = "0.1.1", path = "../mylocalpath/C" }

所以问题是,有没有一种方法可以同时修补两个版本的crate 'C',而不需要本地复制crate 'A'或crate 'B'?

kpbwa7wx

kpbwa7wx1#

我发现Rodrigo的评论很有帮助。
如果你想要一个代码示例,这里我已经用crate rand完成了:

[patch.crates-io]
rand = { version = "0.8.5", git = "https://github.com/rust-random/rand", rev="0.8.5" }
rand2 = { version = "0.7.3", git = "https://github.com/rust-random/rand", rev="0.7.3", package="rand" }

如果你运行cargo tree,你可以看到补丁已经被应用了。

相关问题