tl; dr:我想知道cargo
用于确定文件是否已更改以调试在构建系统设置程序中观察到的问题。
我目前有lsyncd
设置,可以将项目文件镜像到远程Linux机器上,在那里我可以通过ENVVARS_HERE=$my_values cargo build
编译代码。不幸的是,lsyncd
与rsync
一起使用archive flag
似乎并没有复制cargo
用于确定文件是否已被编辑的任何属性:
我设置了一个工作区:
workspace
+ crateA
+ ...
+ crateB
+ ...
其中crateB
取决于crateA
。从此以后,“远程计算机”是指在其上调用cargo
的计算机,而“本地计算机”是指编辑lsyncd
然后传递到“远程计算机”的代码的计算机。我将使用“最近”来指的是在任何时候相对于所描述的状态,所描述的动作的依存关系都没有发生变化。
初始状态:
lsyncd
未在本地计算机上运行crateB
最近由cargo build
在远程计算机上编译了执行:
crateB
中编辑源文件cargo build
结果:
crateB
由远程计算机上的cargo
重新编译初始状态:
lsyncd
在本地计算机上运行(请参阅以下有关配置的注释)crateB
最近由远程机器上的cargo build
进行了编译(请参阅有关与lsyncd
的操作模式有关的时序的注释)执行:
crateB
文件cargo build
结果:
crateA
在远程计算机上编译,随后是crateB
lsyncd
在有和没有archive = true
的情况下运行(据我所知,rsync的archive
标志设置为复制“最多”的元数据,其中“最多”似乎丢失了任何内容cargo
很在意),而结果没有观察到变化。lsyncd
的初始状态的lsyncd
的初始通过,以及编译 lsyncd
的初始通行证lsyncd
的目标目录位于tmpfs
文件系统上(如果这会造成一些不可思议的变化)无论是在这种情况下,lsyncd
还是将来(如果/当我放弃lsyncd
放弃其他偶然发现类似方法的方法时,我都想知道这里发生的事情问题。有关cargo
的来源,例如SO引用了时间戳的用法,但是时间戳有很多种,它们所引用的时间戳还不清楚。
cargo
在确定文件是否已更改时究竟要检查什么 ?
答案 0 :(得分:0)
因此,cargo 使用 fingerprints 来跟踪更改元数据。
在我看来,它与mtime
(修改时间)相关的代码; fingerprint::find_stale_file 和 paths::mtime_recursive。