From: Daan De Meyer Date: Fri, 13 Jan 2023 12:53:21 +0000 (+0100) Subject: Make --repository-directory take multiple arguments X-Git-Tag: v15~365^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dbbffd31ac2f0a5d81cbfa7d19ec7c3b21ddcbe;p=thirdparty%2Fmkosi.git Make --repository-directory take multiple arguments --- diff --git a/NEWS.md b/NEWS.md index e9134694a..a85459661 100644 --- a/NEWS.md +++ b/NEWS.md @@ -30,6 +30,10 @@ kernel images is trivial and fast these days. - Support for --qemu-boot was dropped - Support for --use-host-repositories was dropped, use --repository-directory instead +- `RepositoryDirectory` was renamed to `RepositoryDirectories` and now takes a comma-separated + list of directories to look for extra repository files. +- The `_epel` distributions were removed. Use `--repositories=epel` instead to enable + the EPEL repository. ## v14 diff --git a/mkosi.md b/mkosi.md index cad84edbc..620d07de2 100644 --- a/mkosi.md +++ b/mkosi.md @@ -320,13 +320,13 @@ a boolean argument: either "1", "yes", or "true" to enable, or "0", Linux, additional repositories must be passed in the form `::` (e.g. `myrepo::https://myrepo.net`). -`RepositoryDirectory`, `--repository-directory` +`RepositoryDirectories`, `--repository-directory` : This option can (for now) only be used with RPM-based distributions and Arch - Linux. It identifies a directory containing extra repository definitions that - will be used when installing packages. The files are passed directly to the - corresponding package manager and should be written in the format expected by - the package manager of the image's distro. + Linux. It takes a comma separated list of directories containing extra repository + definitions that will be used when installing packages. The files are passed + directly to the corresponding package manager and should be written in the format + expected by the package manager of the image's distro. `Architecture=`, `--architecture=` diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 90d54abe3..397f82580 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1506,6 +1506,7 @@ class ArgumentParserMkosi(argparse.ArgumentParser): "TarStripSELinuxContext": "--tar-strip-selinux-context", "MachineID": "--machine-id", "SignExpectedPCR": "--sign-expected-pcr", + "RepositoryDirectories": "--repository-directory", } def __init__(self, *kargs: Any, **kwargs: Any) -> None: @@ -1719,9 +1720,12 @@ def create_parser() -> ArgumentParserMkosi: ) group.add_argument( "--repository-directory", + action=CommaDelimitedListAction, + default=[], metavar="PATH", - dest="repos_dir", - help="Directory container extra distribution specific repository files", + dest="repo_dirs", + type=Path, + help="Specify a directory containing extra distribution specific repository files", ) group = parser.add_argument_group("Output options") @@ -2763,7 +2767,7 @@ def load_args(args: argparse.Namespace) -> MkosiConfig: args_find_path(args, "prepare_script", "mkosi.prepare") args_find_path(args, "finalize_script", "mkosi.finalize") args_find_path(args, "workspace_dir", "mkosi.workspace/") - args_find_path(args, "repos_dir", "mkosi.reposdir/") + args_find_path(args, "repo_dirs", "mkosi.reposdir/", as_list=True) args_find_path(args, "repart_dir", "mkosi.repart/") find_extra(args) @@ -2992,10 +2996,13 @@ def load_args(args: argparse.Namespace) -> MkosiConfig: if args.ssh_port <= 0: die("--ssh-port must be > 0") - if args.repos_dir and not (is_rpm_distribution(args.distribution) or args.distribution == Distribution.arch): + if args.repo_dirs and not (is_rpm_distribution(args.distribution) or args.distribution == Distribution.arch): die("--repository-directory is only supported on RPM based distributions and Arch") - if args.netdev and is_centos_variant(args.distribution) and not is_epel_variant(args.distribution): + if args.repo_dirs: + args.repo_dirs = [p.absolute() for p in args.repo_dirs] + + if args.netdev and is_centos_variant(args.distribution) and not is_epel_variant(args.distribution):: die("--netdev is only supported on EPEL centOS variants") if args.machine_id is not None: diff --git a/mkosi/backend.py b/mkosi/backend.py index 0f92046da..0d4c9fce8 100644 --- a/mkosi/backend.py +++ b/mkosi/backend.py @@ -334,7 +334,7 @@ class MkosiConfig: local_mirror: Optional[str] repository_key_check: bool repositories: list[str] - repos_dir: Optional[str] + repo_dirs: list[Path] repart_dir: Optional[str] architecture: str output_format: OutputFormat diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index fa474204d..a9e952b3e 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -108,14 +108,8 @@ def install_arch(state: MkosiState) -> None: ) ) - f.write( - dedent( - f"""\ - - {f"Include = {state.config.repos_dir}/*" if state.config.repos_dir else ""} - """ - ) - ) + for d in state.config.repo_dirs: + f.write(f"Include = {d}/*\n") if state.config.repositories: for repository in state.config.repositories: diff --git a/mkosi/distributions/fedora.py b/mkosi/distributions/fedora.py index d8e4d1e43..89897c3c1 100644 --- a/mkosi/distributions/fedora.py +++ b/mkosi/distributions/fedora.py @@ -170,7 +170,7 @@ def setup_dnf(state: MkosiState, repos: Sequence[Repo] = ()) -> None: ) ) - default_repos = f"reposdir={state.workspace} {state.config.repos_dir if state.config.repos_dir else ''}" + default_repos = f"reposdir={state.workspace} {' '.join(str(p) for p in state.config.repo_dirs)}" vars_dir = state.workspace / "vars" vars_dir.mkdir(exist_ok=True) diff --git a/tests/test_config_parser.py b/tests/test_config_parser.py index ec882a024..110bf873c 100644 --- a/tests/test_config_parser.py +++ b/tests/test_config_parser.py @@ -108,7 +108,7 @@ class MkosiConfig: "qcow2": False, "release": None, "repositories": [], - "repos_dir": None, + "repo_dirs": [], "base_image": None, "secure_boot": False, "secure_boot_certificate": Path("mkosi.secure-boot.crt"),