tl;dr:我想知道cargo
使用什么来确定文件是否已更改以调试我在构建系统设置中观察到的问题。
描述
我目前已经lsyncd
设置将项目文件镜像到远程 linux 机器上,我通过ENVVARS_HERE=$my_values cargo build
. lsyncd
不幸的是,使用rsync
w/archive flag
似乎没有复制cargo
用于确定文件是否已被编辑的任何属性:
我设置了一个工作区:
workspace
+ crateA
+ ...
+ crateB
+ ...
crateB
取决于crateA
. _ 此后,“远程机器”指的cargo
是被调用的机器,“本地机器”指的是编辑代码lsyncd
然后传递到“远程机器”的机器。我将使用“最近”来指代所描述的动作的依赖关系相对于以我知道的方式描述的状态没有改变的任何时间。
情况A
初始状态:
- 工作空间已从本地机器复制到远程机器
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