2017-02-09 13 views
4

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

То, что я не понимаю, почему же хранилище будет создавать несколько каталогов:

$ 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 создавать один из этих каталогов? Вернется ли он к предыдущему каталогу и продолжит его использование?

+0

Я думаю, что для каждой версии Rust создается один каталог. – kennytm

+0

@kennytm, если бы это было так, я ожидал иметь более 15 версий (вплоть до нынешних стабильных версий 1.15, плюс бета, ночных и предварительных версий), а не только 3. – Shepmaster

+1

Интересно, пользователи «груза» -update' также [report] (https://github.com/nabijaczleweli/cargo-update/issues/15), что самый новый иногда не тот, который используется «грузом». –

ответ

5

The hash is based on two fields: вид источника (центральный репозиторий, ссылка git, локальный путь и т. Д.) И URL-адрес источника.

Груз, используемый для делегирования на реализацию ржавого url Hash для Url, который изменился с течением времени. В последний раз была реализована реализация груза в pull request 2737, чтобы исправить issue 1710; Теперь для переноса более стабильного хэша, который не зависит от поведения ржавчины, теперь переносит URL-адрес, а не объект Url.

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