blob: 9dcbe5fae1e42e9217afb0e171b638129f9d9bf2 [file] [log] [blame] [view] [edit]
# `cros query`
[TOC]
`cros query` is a tool to query information about the build system. Right now,
it supports querying information about the boards, overlays, profiles, and
ebuilds.
Unlike Portage tools (such as `portageq`, `equery`, and `q`), `cros query` is
designed to work without a sysroot setup for the board, and operates across all
boards instead of a single board. Additionally, `cros query` does not require a
ChromiumOS SDK to be setup, and only requires a source checkout.
## Command Syntax
The syntax of a query is like so:
``` shellsession
cros query <type> [options...]
```
`type` is one of `boards`, `overlays`, `profiles`, or `ebuilds`. If you don't
add any options to filter the results, it'll print each result. For example,
`cros query boards` will print all boards available in your checkout.
You can add filters to your command with the `-f` flag, which takes a Python
expression. This argument can be passed multiple times. If all provided
filters evaluate `True`, then the result is printed.
For example, `cros query boards -f '"bootimage" in use_flags'` will print all
boards which have the `bootimage` `USE` flag set. The available attributes
(e.g., `use_flags` in the previous example) for each type is documented
[here](cros-query-types.md).
Finally, you may wish to change the output format for each result. You can do
this with the `-o` flag, which takes a Python `format` string. For example, to
print all boards and their corresponding `USE` flags, run:
``` shellsession
cros query boards -o "{name} {use_flags}"
```
Run `cros query --help` for a list of all flags and options.
## More Examples
For each board, show the path to its top level overlay:
``` shellsession
cros query boards -o '{name} {top_level_overlay}'
```
Show the computed global USE flags for the "volteer" board:
``` shellsession
cros query boards -f 'name == "volteer"' -o '{use_flags}'
```
Show which profiles modify (set or unset) the "bootimage" USE flag:
``` shellsession
cros query profiles -f '"bootimage" in use_flags_set | use_flags_unset'
```
Show which ebuilds IUSE the "bootimage" flag:
``` shellsession
cros query ebuilds -f '"bootimage" in iuse'
```
Show all ebuilds which inherit python-r1 and have EAPI <= 6:
``` shellsession
cros query ebuilds -f '"python-r1" in eclasses' -f 'eapi <= 6'
```
## Python API
For sufficiently complex queries, you might benefit from writing the
query as a Python script instead of as a command. Import the
`chromite.lib.build_query` module and use the `Query` iterator to
write queries. For example, to list all boards:
``` shellsession
from chromite.lib import build_query
all_boards = build_query.Query(build_query.Board).all()
```
The `Query` iterator can be directly iterated over (e.g., in a loop),
or you can use the following methods to filter and consume the query:
* `.filter(func)`: Add a filter function. This will prevent the query
iterator from returning results for which `func(result)` returns
`False`.
* `.all()`: Get all results in a `list`.
* `.one()`: Assert there is exactly one result and return it.
* `.one_or_none()`: Assert there is zero or one results. If zero, return
`None`. If one, return it.