Bazel User Manual州--stamp
的文档:
指定--stamp不强制重建受影响的目标,如果它们的依赖关系没有改变。
是否有办法强制构建受影响的目标,以便所有输出二进制文件具有相同的标记,即使它们的依赖关系没有更改?
具体的用例是我正在构建大量相关的Go二进制文件(使用rules_go),并且我想用相同的版本号可靠地标记它们(取自最新的git)提交哈希)。我可以事先做bazel clean
,但这有点违背了使用Bazel的意思:)
谢谢!
答案 0 :(得分:1)
您可以将.git/refs/heads/<release branch>
文件添加为数据输入吗?然后,当提交更改时,您的输入将自动更改。&#34;您可以将其包装在genrule中以添加一些检查或避免重建开发分支上的所有内容:
genrule(
name = "stamper",
outs = ["stamper.out"],
srcs = [
".git/HEAD",
".git/refs/heads/master",
],
cmd = """
if [[ $$(cat $(location :.git/HEAD)) = "refs: refs/heads/<release branch>" ]]; then
cat $(location :.git/refs/heads/master)
else
# If we're not on the release branch, don't uncache things on commit.
echo "dev"
fi
""",
)
有a bug强制行动重新运行,如果有兴趣可以跟踪/评论。