allow to specify list of package dependencies in rebuild target

also replace nargs= by action=append in non-positional args. It is
required to make arguments parsing result more predictable and
consistent
This commit is contained in:
Evgenii Alekseev 2021-04-18 13:34:27 +03:00
parent 46389b87e7
commit 2eb2d3a70a
3 changed files with 7 additions and 5 deletions

View File

@ -155,7 +155,7 @@ def _set_rebuild_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
parser = root.add_parser("rebuild", help="rebuild repository", description="rebuild whole repository", parser = root.add_parser("rebuild", help="rebuild repository", description="rebuild whole repository",
formatter_class=argparse.ArgumentDefaultsHelpFormatter) formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--depends-on", help="only rebuild packages that depend on specified package") parser.add_argument("--depends-on", help="only rebuild packages that depend on specified package", action="append")
parser.set_defaults(handler=handlers.Rebuild) parser.set_defaults(handler=handlers.Rebuild)
return parser return parser
@ -215,7 +215,7 @@ def _set_setup_parser(root: SubParserAction) -> argparse.ArgumentParser:
parser.add_argument("--repository", help="repository name", required=True) parser.add_argument("--repository", help="repository name", required=True)
parser.add_argument("--sign-key", help="sign key id") parser.add_argument("--sign-key", help="sign key id")
parser.add_argument("--sign-target", help="sign options", type=SignSettings.from_option, parser.add_argument("--sign-target", help="sign options", type=SignSettings.from_option,
choices=SignSettings, nargs="*") choices=SignSettings, action="append")
parser.add_argument("--web-port", help="port of the web service", type=int) parser.add_argument("--web-port", help="port of the web service", type=int)
parser.set_defaults(handler=handlers.Setup, lock=None, no_report=True, unsafe=True) parser.set_defaults(handler=handlers.Setup, lock=None, no_report=True, unsafe=True)
return parser return parser

View File

@ -39,10 +39,12 @@ class Rebuild(Handler):
:param architecture: repository architecture :param architecture: repository architecture
:param configuration: configuration instance :param configuration: configuration instance
""" """
depends_on = set(args.depends_on) if args.depends_on else None
application = Application(architecture, configuration) application = Application(architecture, configuration)
packages = [ packages = [
package package
for package in application.repository.packages() for package in application.repository.packages()
if args.depends_on is None or args.depends_on in package.depends if depends_on is None or depends_on.intersection(package.depends)
] # we have to use explicit list here for testing purpose ] # we have to use explicit list here for testing purpose
application.update(packages) application.update(packages)

View File

@ -8,7 +8,7 @@ from ahriman.models.package import Package
def _default_args(args: argparse.Namespace) -> argparse.Namespace: def _default_args(args: argparse.Namespace) -> argparse.Namespace:
args.depends_on = None args.depends_on = []
return args return args
@ -33,7 +33,7 @@ def test_run_filter(args: argparse.Namespace, configuration: Configuration,
must run command with depends filter must run command with depends filter
""" """
args = _default_args(args) args = _default_args(args)
args.depends_on = "python-aur" args.depends_on = ["python-aur"]
mocker.patch("pathlib.Path.mkdir") mocker.patch("pathlib.Path.mkdir")
mocker.patch("ahriman.core.repository.repository.Repository.packages", mocker.patch("ahriman.core.repository.repository.Repository.packages",
return_value=[package_ahriman, package_python_schedule]) return_value=[package_ahriman, package_python_schedule])