Bazel中的可选文件依赖项?
有没有办法在Bazel中指定可选依赖项 我想制定一个规则,在某种程度上镜像Kitware,但我想看看是否可以启用开发人员在树中编辑文件的工作流,理想情况下无需修改Bazel中的可选文件依赖项?,bazel,Bazel,有没有办法在Bazel中指定可选依赖项 我想制定一个规则,在某种程度上镜像Kitware,但我想看看是否可以启用开发人员在树中编辑文件的工作流,理想情况下无需修改构建文件 理想工作流 定义一个规则,external_data,该规则可以从给定服务器获取给定SHA-512的文件 如果文件已经存在,请检查其SHA-512。 如果这是所请求的,则符号链接/复制此文件(确保没有测试可以修改原始文件) 如果不同,则打印一条警告,但继续正常操作,以允许开发人员根据需要快速修改大型文件 我希望这样做,
构建
文件
理想工作流
- 定义一个规则,
,该规则可以从给定服务器获取给定SHA-512的文件external_data
- 如果文件已经存在,请检查其SHA-512。
- 如果这是所请求的,则符号链接/复制此文件(确保没有测试可以修改原始文件)
- 如果不同,则打印一条警告,但继续正常操作,以允许开发人员根据需要快速修改大型文件
存储库\规则
规则
,它手动检查文件是否存在,并有条件地执行(我不确定如果发生第2步,分析是否会重新触发正在“评估”的规则),我就会遇到这种情况
变通办法
我目前对替代工作流的想法是为外部\u数据
,使用工作区
:如果为False
,它将下载文件;如果True
,它将只镜像导出\u文件([])
。然后,开发人员可以在修改文件时设置此选项
(理想情况下,我希望有选择地包含一个表示SHA的文件(
${file}.sha512
),但这似乎回到了最初的问题。)一个解决方法是使用Bazel的glob(…)
方法来有效地检查文件是否存在
如果您有一个文件,比如说basic.bin.sha512
,并且您想要一个规则根据该文件的存在来切换模式,那么您可以使用glob([“basic.bin.sha512”])
,它将精确匹配包文件或返回空列表
我在更大的文件集上尝试过使用它,它似乎可以工作。然而,就目前而言,我的目标定义有一种明确的“开发”模式,以保持Bazel构建相对一致,而不管可能签出哪些文件
下面是一个示例用法:
我是否正确理解您需要一个存储库规则,该规则可以首先签入某个目标的本地存储库(),如果不存在,则从URL获取存储库/文件?本地_repository()和http_archive()的组合?很抱歉,我的意思只是一个
规则。这只适用于存储库中的文件,不一定是单独的工作区/存储库。谢谢你的邀请!此外,我可能有一个解决办法;我将发布可能的解决方案,但将这个问题保留一段时间。