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

How to determine absolute path of target using bazel query?

问题

有什么方法可以使用 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 

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

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

bazel query //some/package/... --output location

然后bazel查询会输出

/absolute/path/some/package/BUILD:lineno:colno target_kind label

对于 //some/package/...

中的每个目标