#cargo-build #mtime #file #compilation #cache #timestamp #sha-256

app cargo-mtime

用于管理沙箱编译中文件 mtime 值的简单工具

2 个版本

0.1.1 2024 年 3 月 13 日
0.1.0 2024 年 3 月 11 日

#482 in 文件系统

MIT/Apache

13KB
246

cargo-mtime

这是一个小型实用程序,可用于管理 Cargo 沙箱编译的 mtime 值。由于 Cargo 依赖于文件系统的 mtime 信息来验证构建,将文件移动到临时目录进行构建也将触发大量重建。已有一些上游尝试解决这个问题,但尚未稳定或被接受。

我正在努力支持 Pants 中的 Rust,它已经在顶层使用基于 sha 的缓存,这意味着它将始终在构建“应该发生”时更加保守。尽管如此,由于路径更改和更新 mtime,Cargo 重建的数量仍然超过所需,即使在有缓存的情况下。这个小实用程序通过将文件的 mtime 恢复到缓存的 mtime 来使 Cargo 更加智能。

它是如何工作的?

这个工具的实现非常简单。它使用一个文件来捕获编译时每个文件的 sha256 哈希和 mtime。当再次在同一个源树中运行时,它将刷新数据库,但也将 mtime 重置为数据库中的时间戳。

要配置它,您可以使用位置参数或环境标志

$ CARGO_MTIME_ROOT=. CARGO_MTIME_DB_PATH=~/.cache/mtimes/project.db cargo-mtime-memoize
$ cargo-mtime-memoize . ~/.cache/mtimes/project.db

请勿在不同项目之间混合数据库,这可能会导致 Cargo 无法正确重建。

依赖项

~8–18MB
~225K SLoC