Size: a a a

Rust — русскоговорящее сообществo

2020 March 27

p

polunin.ai in Rust — русскоговорящее сообществo
путь есть точно. другие проекты же заводятся
источник

BD

Berkus Decker in Rust — русскоговорящее сообществo
файлик с настройками идеи в конкретно этом проекте может попробовать грохнуть и импортнуть заново?
источник

f

folex in Rust — русскоговорящее сообществo
Я тут пытаюсь внедрить в libp2p свою библиотечку, и никак не могу побороть конфликт из-за наличия двух версий одной зависимости – libp2p_core

Я даже сварганил вот такую вот схемку, надеюсь с ней будет проще объяснить, что почем.
источник

f

folex in Rust — русскоговорящее сообществo
Суть в общем такая что есть моя библиотека, my-package, и она зависит от libp2p-core.
Зависимость эту я указываю через libp2p-core { git = … }

Моя библиотека оперирует публичными ключами, а struct PublicKey определена как раз внутри libp2p_core::identity.

Цель – внутри libp2p-kad, т.е. Кадемлии, произвести операцию над публичным ключом ноды кадемлии, и в общем-то всё. Для этого нужно изнутри libp2p-kad дернуть my_package.do(public_key).

Проблема в том, что тогда как my-package зависит от libp2p_core через ГИТ, libp2p-kad зависит от libp2p_core ЛОКАЛЬНО.

И получается, что в момент вызова my_package.do(public_key), существует как бы две версии struct PublicKey:
1. одна из локальной libp2p_core { path = ../../… } ,
2. другая из транзитивной (libp2p-kad => my-packge => libp2p-core { git = … }) “гитовой”
источник

f

folex in Rust — русскоговорящее сообществo
Единственный способ, который я тут вижу, это перенести my-package непосредственно в репу libp2p, и зависеть от libp2p_core локально во всех случаях. Мне бы хотел избежать этого, но я не могу придумать, как.
источник

f

folex in Rust — русскоговорящее сообществo
Такие дела.
источник

В

Вафель in Rust — русскоговорящее сообществo
В карго есть спец секция для изменения зависимостей зависимостей
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
В карго есть спец секция для изменения зависимостей зависимостей
patch?
источник

f

folex in Rust — русскоговорящее сообществo
Или можно прям транзитивные зависимости менять? А как? Я не нагуглил
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
patch?
Ага, вроде он
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
Или можно прям транзитивные зависимости менять? А как? Я не нагуглил
Так patсh для этого и нужен. Меняет транзитивные зависимости https://doc.rust-lang.org/edition-guide/rust-2018/cargo-and-crates-io/replacing-dependencies-with-patch.html
источник

f

folex in Rust — русскоговорящее сообществo
Разве patch влияет на транзитивные зависимости? Он вроде патчит только прямые
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
Разве patch влияет на транзитивные зависимости? Он вроде патчит только прямые
источник

В

Вафель in Rust — русскоговорящее сообществo
> The [patch] section of your Cargo.toml can be used when you want to override certain parts of your dependency graph.
источник

f

folex in Rust — русскоговорящее сообществo
Я сделал в libp2p/Cargo.toml
[patch.crates-io]
libp2p-core = { path = "core", version = "0.16.8" }


И то же самое в libp2p/protocols/kad/Cargo.toml

Не помогло, всё равно две версии
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
даже если бы он сработал, не понятно что нужно было бы патчить. Только если relative path добавлять.
источник

f

folex in Rust — русскоговорящее сообществo
Mikhail Voronov
даже если бы он сработал, не понятно что нужно было бы патчить. Только если relative path добавлять.
relative path меня устроит. Тут проблема в том, что когда пишешь патч на libp2p-core, то непонятно, к какой он применится? К локальной или к транзитивной?
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
Я сделал в libp2p/Cargo.toml
[patch.crates-io]
libp2p-core = { path = "core", version = "0.16.8" }


И то же самое в libp2p/protocols/kad/Cargo.toml

Не помогло, всё равно две версии
Так у тебя одна через path, а другая через git, не? Тебе нужно в патче тоже git = ... версию указать
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
Так у тебя одна через path, а другая через git, не? Тебе нужно в патче тоже git = ... версию указать
Да, всё так… А как мне через git указать на relative path?
источник

f

folex in Rust — русскоговорящее сообществo
т.е. мне нужно чтобы та, которая через git стала локальной, верно?
источник