为什么Cargo为同一个注册表创建多个目录?

She*_*ter 4 rust rust-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
Run Code Online (Sandbox Code Playgroud)

据推测,附加到末尾的哈希在此中扮演了一些角色.是什么导致Cargo创建这些目录之一?它是否会回到之前的目录并继续使用它?

Fra*_*gné 5

哈希基于两个字段:源类型(中央存储库,git引用,本地路径等)和源的URL.

Cargo过去常常委托rust-url实现Hashfor Url,随着时间的推移而变化.为了解决问题1710,货物的实施最后在拉动请求2737中被改变; Cargo现在散列URL字符串而不是对象,以便生成更稳定的散列,而不依赖于rust-url的行为.Url

此外,Cargo使用现已弃用SipHasher的哈希函数.因为它已被弃用,所以Cargo可能在将来改为另一个哈希函数(或者SipHasher可能会转移到箱子而Cargo会使用它,谁知道).