Hash Bazel build使用什么逻辑来计算输入和输出散列?

Hash Bazel build使用什么逻辑来计算输入和输出散列?,hash,build,bazel,Hash,Build,Bazel,许多资料指出,为了加快构建速度,Bazel计算规则输入的哈希值,并进行缓存查找以查找预构建的输出。不幸的是,我找不到关于其逻辑的更多细节。例如,它如何精确地计算要查找的输出哈希值?它是输入散列的一些散列吗?因为它需要在第一次构建实际输出之前进行计算。此外,它是否计算过输出文件的哈希值?这些是如何使用的?有没有办法干扰散列的计算方式?例如,我们希望生成一个ZIP归档文件作为输出,但由于归档文件的其余部分是由非确定性工具生成的,并且每次生成后哈希都会更改,因此只能在该归档文件中散列“清单”文件 规则

许多资料指出,为了加快构建速度,Bazel计算规则输入的哈希值,并进行缓存查找以查找预构建的输出。不幸的是,我找不到关于其逻辑的更多细节。例如,它如何精确地计算要查找的输出哈希值?它是输入散列的一些散列吗?因为它需要在第一次构建实际输出之前进行计算。此外,它是否计算过输出文件的哈希值?这些是如何使用的?有没有办法干扰散列的计算方式?例如,我们希望生成一个ZIP归档文件作为输出,但由于归档文件的其余部分是由非确定性工具生成的,并且每次生成后哈希都会更改,因此只能在该归档文件中散列“清单”文件

规则将文件放入并取出。规则是由行动组成的。 动作的输出应该只依赖于显式声明的输入。 将缓存操作的结果。缓存键可能由env变量、命令行和输入文件的相对路径组成

我认为要进行更深入的调查,这里是一个起点: