#!/usr/bin/env vpython3 # Copyright 2022 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Implements commands for managing Fuchsia repos via the pm tool.""" import argparse import os import subprocess import sys from typing import Iterable from common import SDK_TOOLS_DIR, read_package_paths, register_common_args _pm_tool = os.path.join(SDK_TOOLS_DIR, 'pm') def publish_packages(packages: Iterable[str], repo: str, new_repo: bool = False) -> None: """Publish packages to a repo directory, initializing it if necessary.""" if new_repo: subprocess.run([_pm_tool, 'newrepo', '-repo', repo], check=True) for package in packages: subprocess.run([_pm_tool, 'publish', '-a', '-r', repo, '-f', package], check=True) def register_package_args(parser: argparse.ArgumentParser, allow_temp_repo: bool = False) -> None: """Register common arguments for package publishing.""" package_args = parser.add_argument_group( 'package', 'Arguments for package publishing.') package_args.add_argument('--packages', action='append', help='Paths of the package archives to install') package_args.add_argument('--repo', help='Directory packages will be published to.') if allow_temp_repo: package_args.add_argument( '--no-repo-init', action='store_true', default=False, help='Do not initialize the package repository.') def main(): """Stand-alone function for publishing packages.""" parser = argparse.ArgumentParser() register_package_args(parser) register_common_args(parser) args = parser.parse_args() if not args.repo: raise ValueError('Must specify directory to publish packages.') if not args.packages: raise ValueError('Must specify packages to publish.') if args.out_dir: package_paths = [] for package in args.packages: package_paths.extend(read_package_paths(args.out_dir, package)) else: package_paths = args.packages publish_packages(package_paths, args.repo) if __name__ == '__main__': sys.exit(main())