diff --git a/0001-py3.11-fix-Enum-formatting-to-work-with-python3.11-a.patch b/0001-py3.11-fix-Enum-formatting-to-work-with-python3.11-a.patch new file mode 100644 index 0000000..e4ee572 --- /dev/null +++ b/0001-py3.11-fix-Enum-formatting-to-work-with-python3.11-a.patch @@ -0,0 +1,81 @@ +From f73a97aba7f6a586bf96ad970294a332109ab558 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 24 Apr 2022 12:54:57 +0200 +Subject: [PATCH] py3.11: fix Enum formatting to work with python3.11-a7 + +Something strange is happening with .__repr__() access in python3.11: + +>>> mkosi.backend.ManifestFormat.mro() +[, , , ] +>>> mkosi.backend.ManifestFormat.changelog.__repr__() +Traceback (most recent call last): + File "", line 1, in + File "/usr/lib64/python3.11/enum.py", line 1194, in __repr__ + return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_)) + ^^^^^^^^^^^^^^^^^^^^ + File "/home/zbyszek/src/mkosi/mkosi/backend.py", line 95, in __repr__ + return cast(str, getattr(self, "name")) + ^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'str' object has no attribute 'name' + +Enum somehow subverts normal lookup and makes its own __repr__ function be +used, even though Parseable is listed first in MRO. This seems to be related to +PEP 663, which was rejected, and the changes reverted for -a4 [1], but then the revert +was reverted [2]. + +Let's just sidestep MRO with a method redefinition: + +>>> mkosi.backend.ManifestFormat.changelog.__repr__ + +>>> mkosi.backend.ManifestFormat.changelog.__repr__() +'changelog' + +This should work on all python versions. If python3.11 returns to previous +semantics before the final release, we can remove the workaround. + +[1] commit acf7403f9baea3ae1119fc6b4a3298522188bf96 +Author: Ethan Furman +Date: Sat Jan 15 22:41:43 2022 -0800 + + bpo-40066: [Enum] update str() and format() output (GH-30582) + + Undo rejected PEP-663 changes: + + - restore `repr()` to its 3.10 status + - restore `str()` to its 3.10 status + +[2] commit 42a64c03ec5c443f2a5c2ee4284622f5d1f5326c +Author: Victor Stinner +Date: Mon Jan 17 13:58:40 2022 +0100 + + Revert "bpo-40066: [Enum] update str() and format() output (GH-30582)" (GH-30632) + + This reverts commit acf7403f9baea3ae1119fc6b4a3298522188bf96. +--- + mkosi/backend.py | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/mkosi/backend.py b/mkosi/backend.py +index 78006f392a..3c57ec6295 100644 +--- a/mkosi/backend.py ++++ b/mkosi/backend.py +@@ -217,11 +217,19 @@ class OutputFormat(Parseable, enum.Enum): + def has_fs_compression(self) -> bool: + return self.is_squashfs() or self.is_btrfs() + ++ def __repr__(self) -> str: ++ return Parseable.__repr__(self) ++ def __str__(self) -> str: ++ return Parseable.__str__(self) + + class ManifestFormat(Parseable, enum.Enum): + json = "json" # the standard manifest in json format + changelog = "changelog" # human-readable text file with package changelogs + ++ def __repr__(self) -> str: ++ return Parseable.__repr__(self) ++ def __str__(self) -> str: ++ return Parseable.__str__(self) + + class PartitionIdentifier(enum.Enum): + esp = 'esp' diff --git a/mkosi.spec b/mkosi.spec index b187b1f..d61d842 100644 --- a/mkosi.spec +++ b/mkosi.spec @@ -7,6 +7,8 @@ License: LGPLv2+ URL: https://github.com/systemd/mkosi Source0: https://github.com/systemd/mkosi/archive/v%{version}/%{name}-%{version}.tar.gz +Patch: 0001-py3.11-fix-Enum-formatting-to-work-with-python3.11-a.patch + BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-setuptools @@ -34,13 +36,13 @@ Recommends: python3dist(cryptography) %endif %description -A fancy wrapper around "dnf --installroot", "debootstrap" and -"pacstrap", that may generate disk images with a number of bells and -whistles. +A fancy wrapper around "dnf --installroot", "debootstrap", "pacman", "zypper", +"emerge", and "swupd-extract" that may generate disk images with a number of +bells and whistles. -Generated images are tailed to the purose. This means GPT disk labels -are used by default, though MBR disk labels are supported, and only -systemd based images may be generated. +Generated images are tailed to the purose. This means GPT disk labels are used +by default, though MBR disk labels are supported, and only systemd based images +may be generated. %prep %autosetup -p1