Почему Cargo создает несколько каталогов для одного реестра?

Cargo сохраняет исходный код загруженных ящиков в $HOME/.cargo/registry/src (или в соответствующем $CARGO_HOME каталоге). Я понимаю, что каждый уникальный реестр, который я использую, будет создавать отдельный каталог, предположительно для предотвращения конфликтов.

Я не понимаю, почему один и тот же репозиторий создает несколько каталогов:

$ ls -ld ~/.cargo/registry/src/github.com-*
drwxr-xr-x   473 shep  staff  16082 Dec 27  2015 ~/.cargo/registry/src/github.com-0a35038f75765ae4
drwxr-xr-x  1187 shep  staff  40358 Feb  8 19:10 ~/.cargo/registry/src/github.com-1ecc6299db9ec823
drwxr-xr-x   380 shep  staff  12920 Sep 11 12:16 ~/.cargo/registry/src/github.com-88ac128001ac3a9a

Предположительно, какую-то роль в этом играет хэш, добавленный в конец. Что заставляет Cargo создать один из этих каталогов? Сможет ли он когда-нибудь вернуться в предыдущий каталог и продолжить его использование?


person Shepmaster    schedule 09.02.2017    source источник
comment
Я думаю, что для каждой версии Rust создается один каталог.   -  person kennytm    schedule 09.02.2017
comment
@kennytm, если бы это было так, я ожидал бы иметь более 15 версий (до текущей стабильной версии 1.15, плюс бета, ночные версии и версии до 1.0), а не только 3.   -  person Shepmaster    schedule 09.02.2017
comment
Интересно, что пользователи cargo-update также сообщают, что самая новая версия иногда не является тот, который используется cargo.   -  person набиячлэвэли    schedule 09.02.2017


Ответы (1)


Хэш основан на двух полях.: тип источника (центральный репозиторий, ссылка git, локальный путь и т. д.) и URL-адрес источника.

Cargo использовался для делегирования реализации rust-url Hash для Url, которая со временем менялась. В последний раз реализация Cargo была изменена в запрос на перенос 2737, чтобы исправить проблема 1710; Cargo теперь хеширует строку URL, а не объект Url, чтобы получить более стабильный хеш, который не зависит от поведения rust-url.

Кроме того, Cargo использует функцию now- устарела SipHasher в качестве хэш-функции. Поскольку он устарел, возможно, что Cargo может перейти на другую хэш-функцию в будущем (или SipHasher может переместиться в ящик, и Cargo будет использовать это, кто знает).

person Francis Gagné    schedule 09.02.2017