]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
distributions: use a generator to reduce list boilerplate
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 28 Sep 2023 13:00:45 +0000 (15:00 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 29 Sep 2023 15:40:15 +0000 (17:40 +0200)
When the list of repos to return is conditionalized, we can use yield instead
of concatenating lists. Iterable[Repo] can be satisfied by both the functions
which are generators and the functions which just return a list as before.

mkosi/distributions/centos.py
mkosi/installer/dnf.py

index 13413e1fbd33c61ce1df28efeaa999da91d4d9ca..a5fdb72a6b95b930cf7425c9a48493057fc841bf 100644 (file)
@@ -5,6 +5,7 @@ import shutil
 import urllib.parse
 from collections.abc import Sequence
 from pathlib import Path
+from typing import Iterable
 
 from mkosi.architecture import Architecture
 from mkosi.config import MkosiConfig
@@ -132,148 +133,139 @@ class Installer(DistributionInstaller):
         )
 
     @classmethod
-    def repository_variants(cls, config: MkosiConfig, repo: str) -> list[Repo]:
+    def repository_variants(cls, config: MkosiConfig, repo: str) -> Iterable[Repo]:
         if config.local_mirror:
-            return [Repo(repo, f"baseurl={config.local_mirror}", cls.gpgurls())]
+            yield Repo(repo, f"baseurl={config.local_mirror}", cls.gpgurls())
 
-        if config.mirror:
+        elif config.mirror:
             if int(config.release) <= 8:
-                return [
-                    Repo(
+                yield Repo(
+                    repo.lower(),
+                    f"baseurl={join_mirror(config, f'centos/$stream/{repo}/$basearch/os')}",
+                    cls.gpgurls(),
+                )
+                yield Repo(
+                    f"{repo.lower()}-debuginfo",
+                    f"baseurl={join_mirror(config, 'centos-debuginfo/$stream/$basearch')}",
+                    cls.gpgurls(),
+                    enabled=False,
+                )
+                yield Repo(
+                    f"{repo.lower()}-source",
+                    f"baseurl={join_mirror(config, f'centos/$stream/{repo}/Source')}",
+                    cls.gpgurls(),
+                    enabled=False,
+                )
+            else:
+                if repo == "extras":
+                    yield Repo(
                         repo.lower(),
-                        f"baseurl={join_mirror(config, f'centos/$stream/{repo}/$basearch/os')}",
-                        cls.gpgurls()
-                    ),
-                    Repo(
-                        f"{repo.lower()}-debuginfo",
-                        f"baseurl={join_mirror(config, 'centos-debuginfo/$stream/$basearch')}",
+                        f"baseurl={join_mirror(config, f'SIGs/$stream/{repo}/$basearch/extras-common')}",
                         cls.gpgurls(),
-                        enabled=False,
-                    ),
-                    Repo(
+                    )
+                    yield Repo(
                         f"{repo.lower()}-source",
-                        f"baseurl={join_mirror(config, f'centos/$stream/{repo}/Source')}",
+                        f"baseurl={join_mirror(config, f'SIGs/$stream/{repo}/source/extras-common')}",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                ]
-            else:
-                if repo == "extras":
-                    return [
-                        Repo(
-                            repo.lower(),
-                            f"baseurl={join_mirror(config, f'SIGs/$stream/{repo}/$basearch/extras-common')}",
-                            cls.gpgurls(),
-                        ),
-                        Repo(
-                            f"{repo.lower()}-source",
-                            f"baseurl={join_mirror(config, f'SIGs/$stream/{repo}/source/extras-common')}",
-                            cls.gpgurls(),
-                            enabled=False,
-                        ),
-                    ]
+                    )
 
-                return [
-                    Repo(
+                else:
+                    yield Repo(
                         repo.lower(),
                         f"baseurl={join_mirror(config, f'$stream/{repo}/$basearch/os')}",
                         cls.gpgurls(),
-                    ),
-                    Repo(
+                    )
+                    yield Repo(
                         f"{repo.lower()}-debuginfo",
                         f"baseurl={join_mirror(config, f'$stream/{repo}/$basearch/debug/tree')}",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                    Repo(
+                    )
+                    yield Repo(
                         f"{repo.lower()}-source",
                         f"baseurl={join_mirror(config, f'$stream/{repo}/source/tree')}",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                ]
+                    )
+
         else:
             if int(config.release) <= 8:
-                return [
-                    Repo(
+                yield Repo(
+                    repo.lower(),
+                    f"mirrorlist=http://mirrorlist.centos.org/?release=$stream&arch=$basearch&repo={repo}",
+                    cls.gpgurls(),
+                )
+                # These can't be retrieved from the mirrorlist.
+                yield Repo(
+                    f"{repo.lower()}-debuginfo",
+                    "baseurl=http://debuginfo.centos.org/$stream/$basearch",
+                    cls.gpgurls(),
+                    enabled=False,
+                )
+                yield Repo(
+                    f"{repo.lower()}-source",
+                    f"baseurl=https://vault.centos.org/centos/$stream/{repo}/Source",
+                    cls.gpgurls(),
+                    enabled=False,
+                )
+            else:
+                url = "metalink=https://mirrors.centos.org/metalink"
+
+                if repo == "extras":
+                    yield Repo(
                         repo.lower(),
-                        f"mirrorlist=http://mirrorlist.centos.org/?release=$stream&arch=$basearch&repo={repo}",
-                        cls.gpgurls(),
-                    ),
-                    # These can't be retrieved from the mirrorlist.
-                    Repo(
-                        f"{repo.lower()}-debuginfo",
-                        "baseurl=http://debuginfo.centos.org/$stream/$basearch",
+                        f"{url}?arch=$basearch&repo=centos-extras-sig-extras-common-$stream",
                         cls.gpgurls(),
-                        enabled=False,
-                    ),
-                    Repo(
+                    )
+                    yield Repo(
                         f"{repo.lower()}-source",
-                        f"baseurl=https://vault.centos.org/centos/$stream/{repo}/Source",
+                        f"{url}?arch=source&repo=centos-extras-sig-extras-common-source-$stream",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                ]
-            else:
-                url = "metalink=https://mirrors.centos.org/metalink"
-
-                if repo == "extras":
-                    return [
-                        Repo(
-                            repo.lower(),
-                            f"{url}?arch=$basearch&repo=centos-extras-sig-extras-common-$stream",
-                            cls.gpgurls(),
-                        ),
-                        Repo(
-                            f"{repo.lower()}-source",
-                            f"{url}?arch=source&repo=centos-extras-sig-extras-common-source-$stream",
-                            cls.gpgurls(),
-                            enabled=False,
-                        ),
-                    ]
-
-                return [
-                    Repo(repo.lower(), f"{url}?arch=$basearch&repo=centos-{repo.lower()}-$stream", cls.gpgurls()),
-                    Repo(
+                    )
+                else:
+                    yield Repo(
+                        repo.lower(),
+                        f"{url}?arch=$basearch&repo=centos-{repo.lower()}-$stream",
+                        cls.gpgurls(),
+                    )
+                    yield Repo(
                         f"{repo.lower()}-debuginfo",
                         f"{url}?arch=$basearch&repo=centos-{repo.lower()}-debug-$stream",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                    Repo(
+                    )
+                    yield Repo(
                         f"{repo.lower()}-source",
                         f"{url}?arch=source&repo=centos-{repo.lower()}-source-$stream",
                         cls.gpgurls(),
                         enabled=False,
-                    ),
-                ]
+                    )
 
     @classmethod
-    def repositories(cls, config: MkosiConfig, release: int) -> list[Repo]:
+    def repositories(cls, config: MkosiConfig, release: int) -> Iterable[Repo]:
         if config.local_mirror:
-            return cls.repository_variants(config, "AppStream")
-
-        repos = [
-            *cls.repository_variants(config, "BaseOS"),
-            *cls.repository_variants(config, "AppStream"),
-            *cls.repository_variants(config, "extras"),
-        ]
+            yield from cls.repository_variants(config, "AppStream")
+        else:
+            yield from cls.repository_variants(config, "BaseOS")
+            yield from cls.repository_variants(config, "AppStream")
+            yield from cls.repository_variants(config, "extras")
 
         if release >= 9:
-            repos += cls.repository_variants(config, "CRB")
+            yield from cls.repository_variants(config, "CRB")
         else:
-            repos += cls.repository_variants(config, "PowerTools")
+            yield from cls.repository_variants(config, "PowerTools")
 
-        return repos + cls.epel_repositories(config) + cls.sig_repositories(config)
+        yield from cls.epel_repositories(config)
+        yield from cls.sig_repositories(config)
 
     @classmethod
-    def epel_repositories(cls, config: MkosiConfig) -> list[Repo]:
+    def epel_repositories(cls, config: MkosiConfig) -> Iterable[Repo]:
         gpgurls = ("https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever",)
 
         if config.local_mirror:
-            return []
-
-        repos = []
+            return
 
         if config.mirror:
             for repo, dir in (
@@ -282,60 +274,52 @@ class Installer(DistributionInstaller):
                 ("epel-testing", "epel/testing"),
                 ("epel-next-testing", "epel/testing/next")
             ):
-                repos += [
-                    Repo(
-                        repo,
-                        f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/$basearch')}",
-                        gpgurls,
-                        enabled=False,
-                    ),
-                    Repo(
-                        f"{repo}-debuginfo",
-                        f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/$basearch/debug')}",
-                        gpgurls,
-                        enabled=False,
-                    ),
-                    Repo(
-                        f"{repo}-source",
-                        f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/source/tree')}",
-                        gpgurls,
-                        enabled=False,
-                    ),
-                ]
-        else:
-            url = "metalink=https://mirrors.fedoraproject.org/metalink?arch=$basearch"
-            for repo in ("epel", "epel-next"):
-                repos += [
-                    Repo(repo, f"{url}&repo={repo}-$releasever", gpgurls, enabled=False),
-                    Repo(f"{repo}-debuginfo", f"{url}&repo={repo}-debug-$releasever", gpgurls, enabled=False),
-                    Repo(f"{repo}-source", f"{url}&repo={repo}-source-$releasever", gpgurls, enabled=False),
-                ]
-
-            repos += [
-                Repo("epel-testing", f"{url}&repo=testing-epel$releasever", gpgurls, enabled=False),
-                Repo("epel-testing-debuginfo", f"{url}&repo=testing-debug-epel$releasever", gpgurls, enabled=False),
-                Repo("epel-testing-source", f"{url}&repo=testing-source-epel$releasever", gpgurls, enabled=False),
-                Repo("epel-next-testing", f"{url}&repo=epel-testing-next-$releasever", gpgurls, enabled=False),
-                Repo(
-                    "epel-next-testing-debuginfo",
-                    f"{url}&repo=epel-testing-next-debug-$releasever",
+                yield Repo(
+                    repo,
+                    f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/$basearch')}",
                     gpgurls,
                     enabled=False,
-                ),
-                Repo(
-                    "epel-next-testing-source",
-                    f"{url}&repo=epel-testing-next-source-$releasever",
+                )
+                yield Repo(
+                    f"{repo}-debuginfo",
+                    f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/$basearch/debug')}",
                     gpgurls,
                     enabled=False,
-                ),
-            ]
-
-        return repos
+                )
+                yield Repo(
+                    f"{repo}-source",
+                    f"baseurl={join_mirror(config, f'{dir}/$releasever/Everything/source/tree')}",
+                    gpgurls,
+                    enabled=False,
+                )
+        else:
+            url = "metalink=https://mirrors.fedoraproject.org/metalink?arch=$basearch"
+            for repo in ("epel", "epel-next"):
+                yield Repo(repo, f"{url}&repo={repo}-$releasever", gpgurls, enabled=False)
+                yield Repo(f"{repo}-debuginfo", f"{url}&repo={repo}-debug-$releasever", gpgurls, enabled=False)
+                yield Repo(f"{repo}-source", f"{url}&repo={repo}-source-$releasever", gpgurls, enabled=False)
+
+            yield Repo("epel-testing", f"{url}&repo=testing-epel$releasever", gpgurls, enabled=False)
+            yield Repo("epel-testing-debuginfo", f"{url}&repo=testing-debug-epel$releasever", gpgurls, enabled=False)
+            yield Repo("epel-testing-source", f"{url}&repo=testing-source-epel$releasever", gpgurls, enabled=False)
+            yield Repo("epel-next-testing", f"{url}&repo=epel-testing-next-$releasever", gpgurls, enabled=False)
+            yield Repo(
+                "epel-next-testing-debuginfo",
+                f"{url}&repo=epel-testing-next-debug-$releasever",
+                gpgurls,
+                enabled=False,
+            )
+            yield Repo(
+                "epel-next-testing-source",
+                f"{url}&repo=epel-testing-next-source-$releasever",
+                gpgurls,
+                enabled=False,
+            )
 
     @classmethod
-    def sig_repositories(cls, config: MkosiConfig) -> list[Repo]:
+    def sig_repositories(cls, config: MkosiConfig) -> Iterable[Repo]:
         if config.local_mirror:
-            return []
+            return
 
         sigs = (
             (
@@ -345,116 +329,100 @@ class Installer(DistributionInstaller):
             ),
         )
 
-        repos = []
-
         for sig, components, gpgurls in sigs:
             for c in components:
                 if config.mirror:
                     if int(config.release) <= 8:
-                        repos += [
-                            Repo(
-                                f"{sig}-{c}",
-                                f"baseurl={join_mirror(config, f'centos/$stream/{sig}/$basearch/{c}')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-debuginfo",
-                                f"baseurl={join_mirror(config, f'$stream/{sig}/$basearch')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-source",
-                                f"baseurl={join_mirror(config, f'centos/$stream/{sig}/Source')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                        ]
+                        yield Repo(
+                            f"{sig}-{c}",
+                            f"baseurl={join_mirror(config, f'centos/$stream/{sig}/$basearch/{c}')}",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-debuginfo",
+                            f"baseurl={join_mirror(config, f'$stream/{sig}/$basearch')}",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-source",
+                            f"baseurl={join_mirror(config, f'centos/$stream/{sig}/Source')}",
+                            gpgurls,
+                            enabled=False,
+                        )
                     else:
-                        repos += [
-                            Repo(
-                                f"{sig}-{c}",
-                                f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/$basearch/{c}')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-debuginfo",
-                                f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/$basearch/{c}/debug')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-source",
-                                f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/source/{c}')}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                        ]
+                        yield Repo(
+                            f"{sig}-{c}",
+                            f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/$basearch/{c}')}",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-debuginfo",
+                            f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/$basearch/{c}/debug')}",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-source",
+                            f"baseurl={join_mirror(config, f'SIGs/$stream/{sig}/source/{c}')}",
+                            gpgurls,
+                            enabled=False,
+                        )
                 else:
                     if int(config.release) <= 8:
-                        repos += [
-                            Repo(
-                                f"{sig}-{c}",
-                                f"mirrorlist=http://mirrorlist.centos.org/?release=$stream&arch=$basearch&repo={sig}-{c}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            # These can't be retrieved from the mirrorlist.
-                            Repo(
-                                f"{sig}-{c}-debuginfo",
-                                f"baseurl=http://debuginfo.centos.org/centos/$stream/{sig}/$basearch",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-source",
-                                f"baseurl=https://vault.centos.org/$stream/{sig}/Source/{c}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                        ]
+                        yield Repo(
+                            f"{sig}-{c}",
+                            f"mirrorlist=http://mirrorlist.centos.org/?release=$stream&arch=$basearch&repo={sig}-{c}",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        # These can't be retrieved from the mirrorlist.
+                        yield Repo(
+                            f"{sig}-{c}-debuginfo",
+                            f"baseurl=http://debuginfo.centos.org/centos/$stream/{sig}/$basearch",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-source",
+                            f"baseurl=https://vault.centos.org/$stream/{sig}/Source/{c}",
+                            gpgurls,
+                            enabled=False,
+                        )
                     else:
                         url = "metalink=https://mirrors.centos.org/metalink"
-                        repos += [
-                            Repo(
-                                f"{sig}-{c}",
-                                f"{url}?arch=$basearch&repo=centos-{sig}-sig-{c}-$stream",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-debuginfo",
-                                f"{url}?arch=$basearch&repo=centos-{sig}-sig-{c}-debug-$stream",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                            Repo(
-                                f"{sig}-{c}-source",
-                                f"{url}?arch=source&repo=centos-{sig}-sig-{c}-source-$stream",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                        ]
-
-                    repos += [
-                        Repo(
-                            f"{sig}-{c}-testing",
-                            f"baseurl=https://buildlogs.centos.org/centos/$stream/{sig}/$basearch/{c}",
+                        yield Repo(
+                            f"{sig}-{c}",
+                            f"{url}?arch=$basearch&repo=centos-{sig}-sig-{c}-$stream",
                             gpgurls,
                             enabled=False,
-                        ),
-                    ]
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-debuginfo",
+                            f"{url}?arch=$basearch&repo=centos-{sig}-sig-{c}-debug-$stream",
+                            gpgurls,
+                            enabled=False,
+                        )
+                        yield Repo(
+                            f"{sig}-{c}-source",
+                            f"{url}?arch=source&repo=centos-{sig}-sig-{c}-source-$stream",
+                            gpgurls,
+                            enabled=False,
+                        )
+
+                    yield Repo(
+                        f"{sig}-{c}-testing",
+                        f"baseurl=https://buildlogs.centos.org/centos/$stream/{sig}/$basearch/{c}",
+                        gpgurls,
+                        enabled=False,
+                    )
 
                     if int(config.release) >= 9:
-                        repos += [
-                            Repo(
-                                f"{sig}-{c}-testing-debuginfo",
-                                f"baseurl=https://buildlogs.centos.org/centos/$stream/{sig}/$basearch/{c}",
-                                gpgurls,
-                                enabled=False,
-                            ),
-                        ]
-
-        return repos
+                        yield Repo(
+                            f"{sig}-{c}-testing-debuginfo",
+                            f"baseurl=https://buildlogs.centos.org/centos/$stream/{sig}/$basearch/{c}",
+                            gpgurls,
+                            enabled=False,
+                        )
index 83522caed001c5279fb3db383968a284479f4da9..81e02138df9fce779b8bc878670887c1d2c9e753 100644 (file)
@@ -2,7 +2,7 @@
 import os
 import shutil
 import textwrap
-from collections.abc import Iterable, Sequence
+from collections.abc import Iterable
 from pathlib import Path
 from typing import NamedTuple
 
@@ -27,7 +27,7 @@ def dnf_executable(state: MkosiState) -> str:
     return dnf
 
 
-def setup_dnf(state: MkosiState, repos: Sequence[Repo], filelists: bool = True) -> None:
+def setup_dnf(state: MkosiState, repos: Iterable[Repo], filelists: bool = True) -> None:
     (state.pkgmngr / "etc/dnf/vars").mkdir(exist_ok=True, parents=True)
     (state.pkgmngr / "etc/yum.repos.d").mkdir(exist_ok=True, parents=True)
     (state.pkgmngr / "var/lib/dnf").mkdir(exist_ok=True, parents=True)