Установить конкретную версию зависимости проекта в 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] в манифест, который позволяет вам использовать этот вариант использования.

преобладающие зависимости

Другие вопросы по тегам