Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pmbootstrap for openSUSE:Factory 
checked in at 2026-04-09 16:09:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pmbootstrap (Old)
 and      /work/SRC/openSUSE:Factory/.pmbootstrap.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pmbootstrap"

Thu Apr  9 16:09:20 2026 rev:5 rq:1345265 version:3.10.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/pmbootstrap/pmbootstrap.changes  2026-04-05 
18:24:41.719244289 +0200
+++ /work/SRC/openSUSE:Factory/.pmbootstrap.new.21863/pmbootstrap.changes       
2026-04-09 16:22:09.100116164 +0200
@@ -1,0 +2,19 @@
+Tue Apr  7 19:15:29 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to version 3.10.1
+  * aportgen: correct carch string when generating kernel package.
+  * pmb.qemu.run: Install efi image unconditionally for qemu.
+  * pmb.parse.arguments: Add missing choices parameter for
+    sideload arch.
+  * pmb.types: Properly type action_kconfig.
+  * pmb: Make match statements exhaustive.
+  * pmb: Add error code to all type error ignores.
+  * pyproject.toml: Enable various mypy error codes.
+  * pmb: Add additional overload for root().
+  * pmb: Remove pigz zombie code.
+  * pmb.commands.qemu: Clean up host executable not found error.
+  * pmb.commands.qemu: Log that postmarketOS is running after
+    nstalling EFI.
+  * pmb.build.autodetect: Remove arch from deviceinfo logic.
+
+-------------------------------------------------------------------

Old:
----
  pmbootstrap-3.10.0.tar.gz

New:
----
  pmbootstrap-3.10.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pmbootstrap.spec ++++++
--- /var/tmp/diff_new_pack.SNj2n4/_old  2026-04-09 16:22:09.640138322 +0200
+++ /var/tmp/diff_new_pack.SNj2n4/_new  2026-04-09 16:22:09.644138486 +0200
@@ -21,9 +21,9 @@
 
 
 %define         pythons %{primary_python}
-%define         commit 6ccc1cb9b134ea5c2751ac60a3319328cc76f348
+%define         commit a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6
 Name:           pmbootstrap
-Version:        3.10.0
+Version:        3.10.1
 Release:        0
 Summary:        Sophisticated chroot/build/flash tool to develop and install 
postmarketOS
 License:        GPL-3.0-or-later

++++++ pmbootstrap-3.10.0.tar.gz -> pmbootstrap-3.10.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.ci/integration.sh
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.ci/integration.sh
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.ci/integration.sh
  2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.ci/integration.sh
  2026-04-07 17:52:19.000000000 +0200
@@ -128,6 +128,11 @@
        pmbootstrap initfs extract
 }
 
+newapkbuild() {
+       pmbootstrap newapkbuild something-that-would-not-exist
+       [ -e 
~/.local/var/pmbootstrap/cache_git/pmaports/main/something-that-would-not-exist/APKBUILD
 ]
+}
+
 parse_apkindex() {
        wget 
https://dl-cdn.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz
        pmbootstrap apkindex_parse APKINDEX.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.ci/integration_tests/newapkbuild
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.ci/integration_tests/newapkbuild
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.ci/integration_tests/newapkbuild
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.ci/integration_tests/newapkbuild
   2026-04-09 16:22:09.968151781 +0200
@@ -0,0 +1 @@
+symbolic link to ../integration.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.gitlab-ci.yml 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.gitlab-ci.yml
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/.gitlab-ci.yml  
    2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/.gitlab-ci.yml  
    2026-04-07 17:52:19.000000000 +0200
@@ -124,10 +124,9 @@
   rules:
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
       changes:
-        # We don't run mypy on tests, so no need to include test/**/*.py here.
+        - "**/*.py"
         - .ci/mypy.sh
         - .gitlab-ci.yml
-        - "pmb/**/*.py"
         - pmbootstrap.py
         - pyproject.toml
   script:
@@ -284,6 +283,11 @@
   script:
     - .ci/integration_tests/inspect_initramfs
 
+newapkbuild:
+  extends: .integration
+  script:
+    - .ci/integration_tests/newapkbuild
+
 parse APKINDEX:
   extends: .integration
   script:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/__init__.py 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/__init__.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/__init__.py 
    2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/__init__.py 
    2026-04-07 17:52:19.000000000 +0200
@@ -23,7 +23,7 @@
 from .helpers import logging, mount, other, status
 
 # pmbootstrap version
-__version__ = "3.10.0"
+__version__ = "3.10.1"
 
 # Python version check
 # === CHECKLIST FOR UPGRADING THE REQUIRED PYTHON VERSION ===
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/__init__.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/__init__.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/__init__.py
    2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/__init__.py
    2026-04-07 17:52:19.000000000 +0200
@@ -117,7 +117,7 @@
                 # "DeviceCategory | None"; expected "DeviceCategory".
                 # The check on the top of the page already ensures 
device_category is not
                 # None in this case.
-                pmb.aportgen.device.generate(pkgname, device_category)  # 
type: ignore
+                pmb.aportgen.device.generate(pkgname, device_category)  # 
type: ignore[arg-type]
             case "gcc":
                 pmb.aportgen.gcc.generate(pkgname)
             case "grub-efi":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/device.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/device.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/device.py
      2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/device.py
      2026-04-07 17:52:19.000000000 +0200
@@ -145,7 +145,7 @@
         "mtk_label_ramdisk",
         "header_version",
     ]:
-        v = bootimg[k]  # type: ignore
+        v = bootimg[k]  # type: ignore[literal-required]
         if v:
             content += f"""\
             deviceinfo_{k}="{v}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/linux.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/linux.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/aportgen/linux.py
       2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/aportgen/linux.py
       2026-04-07 17:52:19.000000000 +0200
@@ -16,7 +16,7 @@
 ) -> None:
     device = "-".join(pkgname.split("-")[1:])
     arch = deviceinfo.arch if deviceinfo else ask_for_architecture()
-    carch = arch.kernel_dir()
+    carch = arch.kernel_arch()
 
     makedepends = [
         "bash",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/build/autodetect.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/build/autodetect.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/build/autodetect.py
     2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/build/autodetect.py
     2026-04-07 17:52:19.000000000 +0200
@@ -1,39 +1,13 @@
 # Copyright 2023 Oliver Smith
 # SPDX-License-Identifier: GPL-3.0-or-later
-from pathlib import Path
-
 import pmb.config
 import pmb.helpers.pmaports
 from pmb.core.arch import Arch
 from pmb.core.context import get_context
-from pmb.helpers import logging
 from pmb.meta import Cache
 from pmb.types import Apkbuild, CrossCompile
 
 
-def arch_from_deviceinfo(pkgname: str, aport: Path) -> Arch | None:
-    """
-    The device- packages are noarch packages. But it only makes sense to build
-    them for the device's architecture, which is specified in the deviceinfo
-    file.
-
-    :returns: None (no deviceinfo file)
-              arch from the deviceinfo (e.g. "armhf")
-    """
-    # Require a deviceinfo file in the aport
-    if not pkgname.startswith("device-"):
-        return None
-    deviceinfo = aport / "deviceinfo"
-    if not deviceinfo.exists():
-        return None
-
-    # Return its arch
-    device = pkgname.split("-", 1)[1]
-    arch = pmb.parse.deviceinfo(device).arch
-    logging.verbose(f"{pkgname}: arch from deviceinfo: {arch}")
-    return arch
-
-
 @Cache("package")
 def arch(package: str | Apkbuild) -> Arch:
     """
@@ -50,9 +24,6 @@
     """
     pkgname = package["pkgname"] if isinstance(package, dict) else package
     aport = pmb.helpers.pmaports.find(pkgname)
-    ret = arch_from_deviceinfo(pkgname, aport)
-    if ret:
-        return ret
 
     apkbuild = pmb.parse.apkbuild(aport) if isinstance(package, str) else 
package
     arches = apkbuild["arch"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/build/init.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/build/init.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/build/init.py
   2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/build/init.py
   2026-04-07 17:52:19.000000000 +0200
@@ -22,9 +22,6 @@
     if not build_pkgs:
         build_pkgs = pmb.config.build_packages
 
-    # pigz is multithreaded and makes compression must faster, we install it 
in the native
-    # chroot and then symlink it into the buildroot so we aren't running it 
through QEMU.
-    # pmb.chroot.apk.install(["pigz"], Chroot.native(), build=False)
     pmb.chroot.apk.install(build_pkgs, chroot, build=False)
 
     # Fix permissions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/chroot/mount.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/chroot/mount.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/chroot/mount.py
 2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/chroot/mount.py
 2026-04-07 17:52:19.000000000 +0200
@@ -176,7 +176,6 @@
     musl_link = chroot / "lib" / musl
     if not musl_link.is_symlink():
         pmb.helpers.run.root(["ln", "-s", "/native/lib/" + musl, musl_link])
-        # pmb.helpers.run.root(["ln", "-sf", "/native/usr/bin/pigz", 
"/usr/local/bin/pigz"])
 
 
 def remove_mnt_pmbootstrap(chroot: Chroot) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/chroot/run.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/chroot/run.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/chroot/run.py
   2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/chroot/run.py
   2026-04-07 17:52:19.000000000 +0200
@@ -102,6 +102,15 @@
 def root(
     cmds: Sequence[PathString],
     chroot: Chroot = ...,
+    *,
+    check: bool = ...,
+) -> int: ...
+
+
+@overload
+def root(
+    cmds: Sequence[PathString],
+    chroot: Chroot = ...,
     working_dir: PurePath = ...,
     output: RunOutputTypePopen = ...,
     output_return: Literal[False] = ...,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/commands/config.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/commands/config.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/commands/config.py
      2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/commands/config.py
      2026-04-07 17:52:19.000000000 +0200
@@ -29,8 +29,8 @@
             mirror = name.split(".", 1)[1]
             # Ignore mypy 'error: TypedDict name must be a string literal'.
             # Argparse already ensures 'mirror' is a valid Config.Mirrors key.
-            if value_changed := (config.mirrors[mirror] != value):  # type: 
ignore
-                config.mirrors[mirror] = value  # type: ignore
+            if value_changed := (config.mirrors[mirror] != value):  # type: 
ignore[literal-required]
+                config.mirrors[mirror] = value  # type: 
ignore[literal-required]
         elif isinstance(getattr(Config, name), list):
             new_list = value.split(",")
             if value_changed := (getattr(config, name, None) != new_list):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/commands/qemu.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/commands/qemu.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/commands/qemu.py
        2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/commands/qemu.py
        2026-04-07 17:52:19.000000000 +0200
@@ -57,10 +57,9 @@
     if shutil.which(executable):
         return executable
     else:
-        raise RuntimeError(
-            "Could not find the '" + executable + "' executable"
-            " in your PATH. Please install it in order to"
-            " run qemu."
+        raise NonBugError(
+            f"Could not find the '{executable}' executable in your PATH."
+            "  Please install it in order to run qemu."
         )
 
 
@@ -231,6 +230,8 @@
             command += ["-M", "pseries"]
         case Arch.loongarch64:
             command += ["-M", "virt"]
+        case _:
+            pass
 
     # Configure display
     if qemu_display != "none":
@@ -368,6 +369,12 @@
         "qemu-ui-sdl",
     ]
 
+    chroot = Chroot.native()
+    pmb.chroot.init(chroot)
+    pmb.chroot.apk.install(depends, chroot)
+
+
+def install_efi_image(arch: Arch) -> None:
     edk2_pkg = None
 
     # EDK2 builds are only available for the target architecture
@@ -380,7 +387,7 @@
             edk2_pkg = "edk2-loongarch64"
         case Arch.ppc64le:
             # ppc64le uses SLOF included in QEMU instead of EFI
-            pass
+            return
         case Arch.riscv64:
             edk2_pkg = "ovmf"
         case _:
@@ -388,16 +395,9 @@
 
     # If we're running natively, install it to the native chroot, otherwise we 
need to
     # install it in the target chroot
-    if edk2_pkg is not None and arch == Arch.native():
-        depends.append(edk2_pkg)
-    elif edk2_pkg is not None:
-        target_chroot = Chroot.buildroot(arch)
-        pmb.chroot.init(target_chroot)
-        pmb.chroot.apk.install([edk2_pkg], target_chroot)
-
-    chroot = Chroot.native()
-    pmb.chroot.init(chroot)
-    pmb.chroot.apk.install(depends, chroot)
+    target_chroot = Chroot.native() if arch == Arch.native() else 
Chroot.buildroot(arch)
+    pmb.chroot.init(target_chroot)
+    pmb.chroot.apk.install([edk2_pkg], target_chroot)
 
 
 def qemu(
@@ -442,6 +442,8 @@
 
     if not use_host_qemu:
         install_depends(arch)
+    install_efi_image(arch)
+
     logging.info("Running postmarketOS in QEMU VM (" + arch.qemu_system() + 
")")
 
     qemu, env = command_qemu(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/helpers/locale.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/helpers/locale.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/helpers/locale.py
       2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/helpers/locale.py
       2026-04-07 17:52:19.000000000 +0200
@@ -274,6 +274,8 @@
             return XkbLayout("pak", "urd-nla")
         case "yo":
             return XkbLayout("ng", "yoruba")
+        case _:
+            pass
     if language not in locales_without_layout:
         logging.warning(f'Language "{language}" not found in language list')
     return XkbLayout()  # return default layout if no layout was found
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/install/_install.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/install/_install.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/install/_install.py
     2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/install/_install.py
     2026-04-07 17:52:19.000000000 +0200
@@ -363,6 +363,8 @@
                     layout = "dano"
                 case "rx51_pt" | "rx51_es":
                     layout = "ptes"
+                case _:
+                    pass
             # Multiple files can contain the keyboard layout, take last
             xconfig = xconfig.splitlines()[-1]
             old_text = 'Option *\\"XkbLayout\\" *\\".*\\"'
@@ -444,9 +446,7 @@
     if "alpine-appstream-downloader" not in installed_pkgs or offline:
         return
 
-    # FIXME: mypy infers root() to return Popen here, but it should be 
inferring int. Broken
-    # overloads.
-    if not pmb.chroot.root(  # type: ignore[truthy-bool]
+    if not pmb.chroot.root(
         ["alpine-appstream-downloader", "/mnt/appstream-data"], chroot, 
check=False
     ):
         pmb.chroot.root(["mkdir", "-p", "/var/lib/swcatalog"], chroot)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/parse/arguments.py
 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/parse/arguments.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/parse/arguments.py
      2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/parse/arguments.py
      2026-04-07 17:52:19.000000000 +0200
@@ -273,6 +273,7 @@
     ret.add_argument("--user", help="use a different username than the one set 
in init")
     ret.add_argument(
         "--arch",
+        choices=Arch.supported(),
         help="skip automatic architecture deduction and use the given value",
         type=lambda x: Arch.from_str(x),
     )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/types.py 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/types.py
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pmb/types.py    
    2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pmb/types.py    
    2026-04-07 17:52:19.000000000 +0200
@@ -135,6 +135,7 @@
 PathString = Path | str
 Env = dict[str, PathString]
 Apkbuild = dict[str, Any]
+ActionKConfig = Literal["check", "edit", "migrate", "generate"]
 WithExtraRepos = Literal["default", "enabled", "disabled"]
 
 # These types are not definitive / API, they exist to describe the current
@@ -174,7 +175,7 @@
 class PmbArgs(Namespace):
     action_flasher: str
     action_initfs: str
-    action_kconfig: str
+    action_kconfig: ActionKConfig
     action_netboot: str
     action_test: str
     add: str
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pyproject.toml 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pyproject.toml
--- 
old/pmbootstrap-3.10.0-6ccc1cb9b134ea5c2751ac60a3319328cc76f348/pyproject.toml  
    2026-04-04 00:33:24.000000000 +0200
+++ 
new/pmbootstrap-3.10.1-a72d80ee0101e7fe7b9361b63f3b2f4046ef40a6/pyproject.toml  
    2026-04-07 17:52:19.000000000 +0200
@@ -86,4 +86,15 @@
 strict_equality = true
 strict_equality_for_none = true
 warn_unreachable = true
-enable_error_code = "truthy-bool"
+enable_error_code = [
+    "exhaustive-match",
+    "ignore-without-code",
+    "redundant-expr",
+    "redundant-self",
+    "mutable-override",
+    "truthy-bool",
+    "truthy-iterable",
+    "unimported-reveal",
+    "unused-awaitable",
+    "unused-ignore",
+]

Reply via email to