Установить конкретную версию зависимости проекта в Cargo.toml или Cargo.lock
Допустим, мой проект A зависит от библиотеки B, которая зависит от библиотеки C.
Библиотека B устанавливает версию зависимости "*" (любую), чтобы Cargo загружал последнюю версию C.
Как я могу проинструктировать груз для создания библиотеки B с использованием определенной версии библиотеки C?
В настоящее время я пытаюсь построить железо.
Текущая сборка терпит неудачу, но я вижу последнюю успешную сборку в https://travis-ci.org/iron/iron/builds/45254195, включая версию ржавчины и версии грузовых пакетов.
Поэтому я скачал специфическую ржавчину, используемую в ночной сборке, и установил прямые зависимости железа от тех, которые использовались в этой сборке, отредактировав Cargo.toml:
(...)
[dependencies]
hyper = "0.0.18"
typemap = "0.0.5"
url = "0.2.9"
(...)
Но rust-serialized, который является зависимостью пакетов "url" и "time", загружается в последней версии, которая не совместима с моей конкретной версией rust.
Если бы я использовал версию, использованную в сборке Travis выше, я уверен, что она успешно скомпилируется.
1 ответ
Текущая идея
Я думаю, что вам придется проверить Железо, изменить Cargo.toml
указать версии (как вы уже сделали). Затем вам нужно повторить процесс, проверяя url
изменить его Cargo.toml
, а затем убедитесь, что вы используете свою версию url
в железе Cargo.toml
, Промыть и повторить. Все это звучит ужасно:-(
Первая идея
Из документов Cargo:
Как и раньше, скажем, вы работаете над проектом,
uuid
, который зависит отrand
, На этот раз вы тот, кто находит ошибку вrand
, и вы хотите написать патч и иметь возможность протестировать ваш патч, используя вашу версиюrand
вuuid
,Переопределение пути передается в Cargo через
.cargo/config
механизм конфигурации. Если Cargo находит эту конфигурацию при сборке вашего пакета, он будет использовать переопределение на вашем локальном компьютере вместо источника, указанного в вашем пакете.Cargo.toml
,Внутри этого файла поместите это:
paths = ["/path/to/project/rand"]
Вторая идея
Примечание Это, вероятно, не будет работать. Когда я впервые запустил Rust, кто-то сказал мне, что вы можете собрать несколько версий одной и той же библиотеки в один двоичный файл. Это означало бы, что нет единого места, где вы можете указать версию, которая применяется повсеместно, как вы могли бы с Gemfile.
Возможно, вы сможете просто указать версии (или хэши SHA?) Для каждой зависимости, которая, как вы знаете, работает с вашей версией Rust. Cargo должен иметь возможность разрешать переходные зависимости и просто блокировать вас к предыдущей версии (если есть такая, которая соответствует всем требованиям).
С момента предоставления anwser Cargo добавил [patch]
в манифест, который позволяет вам использовать этот вариант использования.