如何使用bazel查询确定目标的绝对路径?

pet*_*der 4 bazel

有什么方法可以使用bazel queryaspects确定 bazel 在包裹路径上的哪个位置提取包裹?类似于which命令的东西。

该文档建议使用--show_package_location. 但是,已弃用且不再受支持,请参阅#5592。此外,我尝试使用它并没有发现很多有用的信息。我已经尝试bazel query //some/target/... --output label_kind --show_package_location过以及其他排列,bazel build并且它不会向控制台输出添加任何不同的输出。

动机

我的包路径上有两个不同的目录用于获取、查询和构建。

--package_path=%workspace%:%workspace%/__fuse__

此配置支持用户对我们的大型存储库执行稀疏检出的工作流程,同时仍然能够构建尚未在本地检出的代码。在构建目标时,Bazel 会检查包的本地检出版本,如果不存在,它会搜索只读保险丝安装。

有时,用户不清楚从哪里获取包,即它是本地签出的版本还是从 fuse 提供的版本。当他们删除或移动 Bazel 包时,这会成为问题,而 Bazel 会在保险丝安装座上选择该版本。

如果我可以将它们指向一个将每个包映射到它被拾取的位置的命令,那就太好了。例如,如果我在...上运行命令

//some/package/foo --> package_path/some/package/foo
//some/package/bar --> other_package_path/some/package/bar 
Run Code Online (Sandbox Code Playgroud)

pet*_*der 5

我在 bazel 查询文档中完全错过了这一点。

使用 bazel 查询,我只需要添加--output location,因此只要我进行如下查询:

bazel query //some/package/... --output location
Run Code Online (Sandbox Code Playgroud)

然后bazel查询将输出

/absolute/path/some/package/BUILD:lineno:colno target_kind label
Run Code Online (Sandbox Code Playgroud)

对于每个目标 //some/package/...