【问题标题】:Aggregate filegroups in subpackages into a large filegroup in bazel?将子包中的文件组聚合到bazel中的一个大文件组中?
【发布时间】:2018-10-30 16:37:36
【问题描述】:

我有一个父目录foo,子目录barbazqux。所有四个目录都包含一个 bazel BUILD 文件并定义 filegroup 包含子目录中所有文件的规则(以及各种其他规则)。这样做的问题是父目录foo 中的filegroup 不能使用glob 来确保包含所有文件(因为glob 不会跨越包边界)。相反,我目前在foo 中手动将所有子规则列为srcs,并且此手动列表容易出错,因为当添加foo 的另一个子规则时,作者必须记住将其添加到srcsfoo。我试图通过查看在foo 中添加genquery 规则来解决这个问题取得一些进展(认为我可以在构建时以某种方式以编程方式从中提取srcs 列表),但在@987654335 中不允许使用递归模式@ 的 genquery 规则,所以这不成功。

创建这样一个文件组最不容易出错的方法是什么?通过列出srcs,有什么比我目前手动构建它更好的吗?

【问题讨论】:

  • 你怎么知道哪些子组应该在超组中?

标签: bazel


【解决方案1】:

文件组的srclist of labels

因此,您可以(并且应该)这样做

filegroup(
  name = "foo_supergroup",
  srcs = [
     "//foo/bar:smallergroup",
     "//foo/baz:smallergroup",
     "//foo/qux:smallergroup",
  ],
)

编辑:然后您可以添加提交前检查这些依赖项是否与子组相同。

为此,我建议你引入一个标签“是的”: foo/BUILD 包含

filegroup(
  name = "smallergroup",
  srcs = glob(["*.txt"]),
  tags = ["yeah"],
)

感谢:

blaze query 'attr("tags", ".*yeah.*", deps(//foo/...))'
//foo/bar:smallergroup
//foo/baz:smallergroup
//foo/qux:smallergroup

然后很容易与超群的来源进行比较:

blaze query 'deps(//foo:foo_supergroup, 1)'
//foo:foo_supergroup
//foo/bar:smallergroup
//foo/baz:smallergroup
//foo/qux:smallergroup

事实上,您不需要特定的预提交。您可以使用sh_test(使用命令diff)来比较这两个使用gen_query 进行的火焰查询的输出

【讨论】:

  • 这是我试图避免的,因为它容易出错。许多其他开发人员可以添加子目录,他们可能偶尔会忘记将较小的组添加到超组。
  • 哦,好吧,我以为您正在导出文件并再次创建一个大文件组。让我想一想,但我不知道您的功能请求是否有答案。
  • 我建议您使用带有标签的预提交脚本来查找预期目标。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多