]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Make --repository-directory take multiple arguments
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 13 Jan 2023 12:53:21 +0000 (13:53 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 13 Jan 2023 15:19:55 +0000 (16:19 +0100)
NEWS.md
mkosi.md
mkosi/__init__.py
mkosi/backend.py
mkosi/distributions/arch.py
mkosi/distributions/fedora.py
tests/test_config_parser.py

diff --git a/NEWS.md b/NEWS.md
index e9134694a5e3c89040adc9f83452a10e73c3b54b..a854596611ca14a01595213e93611d8a7e593fbd 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
     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
 
index cad84edbcf8b77538639255d6e7b67965173ca00..620d07de23420c8935bf90f05c7216f66f15ca70 100644 (file)
--- 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 `<name>::<url>`
   (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=`
 
index 90d54abe3114005d2d87232b63492ea0153bef36..397f825805f12f8c0edcadd3e02cb64efc3a234c 100644 (file)
@@ -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:
index 0f92046dae46861ff70785620d59296b59c9f70d..0d4c9fce8789a8cfdbe61b108f623322ac630bd2 100644 (file)
@@ -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
index fa474204d96869b32667c3a8feaf2498b53a20cb..a9e952b3ec3f1a9be22f1edcaec989bf4b7a7f05 100644 (file)
@@ -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:
index d8e4d1e432a7b22317f252f1a8b8269b48f1c49a..89897c3c14de25219f17e8d98ac319793f2f7a20 100644 (file)
@@ -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)
index ec882a024718c1eafff7207062eea124d008a10f..110bf873c8821cfc08d4b34f2a9fc22340f2b905 100644 (file)
@@ -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"),