gpt4 book ai didi

bazel - Bazel 中的可选文件依赖项?

转载 作者:行者123 更新时间:2023-12-04 17:48:42 45 4
gpt4 key购买 nike

有没有办法在 Bazel 中指定可选依赖项?

我想制定一个规则来在某种程度上反射(reflect) Kitware 的 ExternalData , 但我想看看我是否可以启用开发人员在树中编辑文件的工作流,理想情况下不需要修改 BUILD 文件。

理想的工作流程

  • 定义一个规则,external_data,它可以从给定的 SHA-512 给定服务器获取文件。
  • 如果文件已经存在,请检查它是否为 SHA-512。
    • 如果这是所要求的,符号链接(symbolic link)/复制此文件(确保没有测试可以修改原始文件)。
    • 如果不同,打印一条警告,但照常进行,以允许开发人员根据需要快速修改大文件。

我想这样做,以便 Bazel 可以在文件存在和不存在之间切换,并且对缓存的误报具有鲁棒性。如果我不将其作为可选依赖项包括在内,我想避免的示例场景:

  1. 在之前的运行中,文件在工作区中,Bazel 构建了目标,一切都很好,很漂亮。
  2. 开发人员在上传后从工作区中删除文件,对他们的更改感到满意并希望测试下载过程。
  3. 当运行下游目标时,Bazel 不关心工作区的变化,因为它不是显式依赖,符号链接(symbolic link)失效,测试崩溃和燃烧。

对我来说,如果我尝试实现手动检查文件的repository_rule rule,我似乎会遇到这个问题存在,并有条件地执行(如果第 2 步发生,我不确定分析是否会重新触发该规则被“评估”。)。

解决方法

我目前对替代工作流程的想法是为 external_datause_workspace 提供一个显式选项:如果 False,它将下载文件;如果 True,它将只是镜像 exports_files([])。开发人员可以在修改文件时设置它。

(理想情况下,我想有选择地包括一个指示 SHA 的文件(${file}.sha512),但这似乎可以追溯到原问。)

最佳答案

一种解决方法是使用 Bazel 的 glob(...) 方法来有效地检查文件是否存在。

如果你有一个文件,比如说 basic.bin.sha512,并且你想要一个规则来根据该文件的存在来切换模式,你可以使用 glob(["basic.bin .sha512"]),它将完全匹配包文件或返回一个空列表。

我曾尝试在较大的文件集上使用它,它似乎可以工作。然而,就目前而言,我错误地为目标定义采用了一种明确的“开发”模式,以保持 Bazel 构建相对一致,而不管可能 check out 哪些文件。

这是一个示例用法:

https://github.com/EricCousineau-TRI/external_data_bazel/blob/4bf1dff/WORKFLOWS.md#edit-files-in-a-sha512-group

关于bazel - Bazel 中的可选文件依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46853097/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com