| # Copyright 2021 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Completer functions to use with -p, --packages.""" |
| |
| import argparse |
| from pathlib import Path |
| from typing import Iterator, List |
| |
| from chromite.lib import build_target_lib |
| from chromite.lib import portage_util |
| from chromite.lib import sysroot_lib |
| |
| |
| def package(prefix, action, parser, parsed_args) -> List[str]: # pylint: disable=unused-argument |
| """List all packages with the package version.""" |
| packages = ( |
| portage_util.SplitEbuildPath(x) for x in _get_ebuilds(parsed_args)) |
| return [f'{cat}/{pv}' for (cat, _, pv) in packages] |
| |
| |
| def package_atom(prefix, action, parser, parsed_args) -> List[str]: # pylint: disable=unused-argument |
| """List all packages without the package version.""" |
| return [portage_util.EbuildToCP(x) for x in _get_ebuilds(parsed_args)] |
| |
| |
| def _get_sysroot(parsed_args: argparse.Namespace) -> sysroot_lib.Sysroot: |
| """Get the sysroot using the parsed arguments. |
| |
| Check to see if the parsed arguments contain arguments that can be used to |
| determine the sysroot path. The sysroot can be specified when there's also |
| a build target argument and should take precedence. --board/--build_target |
| are the old/new names for the same thing so should never both be defined. |
| """ |
| sysroot_path = build_target_lib.get_sdk_sysroot_path() |
| if hasattr(parsed_args, 'sysroot') and parsed_args.sysroot: |
| sysroot_path = parsed_args.sysroot |
| elif hasattr(parsed_args, 'board') and parsed_args.board: |
| sysroot_path = build_target_lib.get_default_sysroot_path(parsed_args.board) |
| elif hasattr(parsed_args, 'build_target') and parsed_args.build_target: |
| sysroot_path = build_target_lib.get_default_sysroot_path( |
| parsed_args.build_target) |
| return sysroot_lib.Sysroot(sysroot_path) |
| |
| |
| def _get_ebuilds(parsed_args: argparse.Namespace) -> Iterator[Path]: |
| """Get ebuild files using the parsed arguments.""" |
| sysroot = _get_sysroot(parsed_args) |
| overlay_paths = sysroot.get_overlays() |
| yield from portage_util.FindEbuildsForOverlays(overlay_paths) |