From: Zbigniew Jędrzejewski-Szmek Date: Thu, 28 Sep 2023 13:00:45 +0000 (+0200) Subject: distributions: use a generator to reduce list boilerplate X-Git-Tag: v18~26^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fbb7dddb6d0b5eac57dd6656874f4df7ef106541;p=thirdparty%2Fmkosi.git distributions: use a generator to reduce list boilerplate 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. --- diff --git a/mkosi/distributions/centos.py b/mkosi/distributions/centos.py index 13413e1fb..a5fdb72a6 100644 --- a/mkosi/distributions/centos.py +++ b/mkosi/distributions/centos.py @@ -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, + ) diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index 83522caed..81e02138d 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -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)