Укажите конкретную версию зависимости зависимости проекта от Cargo.toml или Cargo.lock - программирование

Укажите конкретную версию зависимости зависимости проекта от Cargo.toml или Cargo.lock

Скажем, мой проект A зависит от библиотеки B, которая зависит от библиотеки C.

Библиотека B устанавливает версию зависимостей в "*" (любая), так что груз загрузит последнюю версию C.

Как я могу поручить грузу построить библиотеку B для использования определенной версии библиотеки C?


В настоящее время я пытаюсь создать iron.

Текущая сборка не работает, но я могу увидеть последнюю успешную сборку https://travis-ci.org/iron/iron/builds/45254195, включая версию ржавчины и версии пакета груза.

Итак, я загрузил конкретную ржавчину, ночную, используемую в сборке, и я установил прямые зависимости железа от тех, которые используются в этой сборке, путем редактирования Cargo.toml:

(...)
[dependencies]
hyper = "0.0.18"
typemap = "0.0.5"
url = "0.2.9"
(...)

Но сериализована ржавчина, которая является зависимостью пакетов "url" и "time", загружается в последней версии, которая не компилируется с моей конкретной версией ржавчины.

Если я использовал версию, используемую в сборке Travis выше, я уверен, что она будет успешно скомпилирована.

4b9b3361

Ответ 1

Текущая идея

Я думаю, вам нужно будет проверить Iron, измените Cargo.toml, чтобы указать версии (как вы уже сделали). Затем вам нужно повторить процесс, проверив url, изменив его Cargo.toml, затем убедитесь, что вы используете свою версию url в Iron Cargo.toml. Промыть и повторить. Это звучит ужасно: - (

Первая идея

Из Документы по грузовикам:

Как и раньше, скажем, вы работаете над проектом uuid, который зависит от rand. На этот раз вы обнаружите ошибку в rand, и вы хотите написать патч и проверить свой патч, используя свою версию rand в uuid.

Перемещение пути передается в Cargo через механизм конфигурации .cargo/config. Если Cargo обнаружит эту конфигурацию при создании вашего пакета, она будет использовать переопределение на вашей локальной машине вместо источника, указанного в вашем Cargo.toml.

Внутри этого файла поместите это:

paths = ["/path/to/project/rand"]

Вторая идея

Примечание Это, вероятно, не сработает. То, что кто-то сказал мне, когда я впервые начал Rust, состоит в том, что вы можете иметь несколько версий одной и той же библиотеки, скомпилированных в один двоичный файл. Это означало бы, что нет ни одного места, где вы можете указать версию, которая применяется во всем, как вы могли бы с помощью Gemfile.

Возможно, вы сможете просто указать версии (или хэши SHA?) для каждой зависимости, которая, как вы знаете, работает с вашей версией Rust. Cargo должен иметь возможность разрешать переходные зависимости и просто блокировать вас до предыдущей версии (если таковая соответствует всем требованиям).