如何基于上个月的crates.io生成Cargo.lock?

Chr*_*aus 8 rust rust-cargo

我想根据2017年2月22日提供的内容,在Cargo.toml的Rust项目中创建一个Cargo.lock文件.我需要使版本选择与特定日期发生的版本兼容.(不,在某个地方没有版本控制的Cargo.lock.)

我试过这个无济于事:

  1. 将crates.io索引克隆到本地目录中,并检查与所需日期匹配的旧提交.
  2. 在.cargo/config中使用以下行:

    [source.mycrates]
    registry = "file:///path/to/crates.io-index"  # contains old checkout
    
    [source.crates-io]
    replace-with = "mycrates"
    
    Run Code Online (Sandbox Code Playgroud)

然而,货物将Cargo.toml中的依赖关系解析为最新的可用,而不是指定结帐中的最新关联.

我怎么能及时扭曲Cargo的版本选择?

Ben*_*ern 1

既然您说您已经尝试过克隆索引,那么我假设您仍然保留着它。为了其他读者的利益,该存储库似乎是在 Git 中维护的,并且可以从https://github.com/rust-lang/crates.io-index获取。

您需要告诉cargo运行,--frozen以便它不会接触网络,qv Cargo FAQ,如果它认为需要,它就会爆炸。如果它已经下载了东西,你也需要这样做cargo clean,否则就会破坏缓存。

如果您在结账时尚未获得所需的所有软件包,则还需要下载您感兴趣的特定版本。Dissecting Crates.io:Bare Minimum Mirror有一个解释,我将在此处进行总结以防链接失效。

config.json在 Crates 存储库的根目录中有用于下载软件包的 URL,官方认为这些 URL 不稳定,但现在可以使用。

“gmjosack”使用的板条箱中的示例显示了下载它libc的路径,基于in的密钥和发布时可用的版本。/api/v1/crates/libc/0.1.10/downloaddlhttps://crates.io/api/v1/cratesconfig.json

您可能需要编写下载脚本才能构建镜像。另请参阅:在 stackoverflow 上使用 Web 浏览器下载 Rust 包