blob: edeb59ca24f208295ee5b5948109e0e9458bfdf1 [file] [log] [blame]
# 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 ffx tool."""
import argparse
import logging
import os.path
from typing import Iterable
from common import run_ffx_command
def ensure_repository(args: argparse.Namespace) -> bool:
"""Initializes the repository if necessary, returns true if the repository
is being created."""
assert not os.path.exists(args.repo) or os.path.isdir(args.repo), \
'Need a directory for repo: ' + args.repo
if args.no_repo_init and os.path.exists(args.repo):
logging.warning(
'You are using --no-repo-init, but the repo %s exists. Ensure it\'s'
' created via ffx repository create, or the following repository '
'publish may fail.', args.repo)
return False
run_ffx_command(cmd=['repository', 'create', args.repo])
return True
def publish_packages(packages: Iterable[str],
args: argparse.Namespace) -> None:
"""Publishes packages to a repo directory."""
cmd = ['repository', 'publish']
for package in packages:
cmd += ['--package-archive', package]
cmd += [args.repo]
run_ffx_command(cmd=cmd)
def register_package_args(parser: argparse.ArgumentParser) -> None:
"""Registers 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.')
package_args.add_argument('--no-repo-init',
action='store_true',
default=False,
help='Do not initialize the package repository.')