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
)
@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 (
("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 = (
(
),
)
- 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,
+ )