Bazel query deps to files

Viewed 2654

I have a query that effectively returns all labels for dependencies of a particular label. I want to know the actual file path of these dependencies.

$ bazel query 'deps(//foo:bar)' --noimplicit_deps 
//baz:__init__.py
//baz:__baz__.py

--ouput location doesn't do the trick as it simply tells me this same label and the build file:line

my desired output is:

/some/path/baz/__init__.py
/some/path/baz/baz.py
1 Answers

There's no way to get paths directly out of the query command, but --output location results can easily be turned into filesystem paths with a little shell. Here's an example on the Bazel repository:

$ bazel query 'kind("source file", deps(//:srcs))' | sed  -e 's/:/\//' -e 's/^\/\+//' | head -n10
tools/zip/BUILD.tools
tools/zip/BUILD
tools/whitelists/config_feature_flag/BUILD
tools/whitelists/BUILD
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/SourceFileCoverageTest.java
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/LineCoverageTest.java
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/LcovPrinterTest.java
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/LcovParserTest.java
tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/LcovMergerTestUtils.java

Of course, this produces garbage if the targets you've queried aren't actually source files. Generally, you need to use a kind("source file", ...) filter to make sure you're only outputting real files.

Related