Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pdm for openSUSE:Factory checked in at 2026-04-14 17:49:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pdm (Old) and /work/SRC/openSUSE:Factory/.python-pdm.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pdm" Tue Apr 14 17:49:23 2026 rev:21 rq:1346529 version:2.26.7 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pdm/python-pdm.changes 2026-03-31 15:23:55.864424180 +0200 +++ /work/SRC/openSUSE:Factory/.python-pdm.new.21863/python-pdm.changes 2026-04-14 17:50:08.656065154 +0200 @@ -1,0 +2,8 @@ +Tue Apr 14 06:46:37 UTC 2026 - Steve Kowalik <[email protected]> + +- Add patch support-installer-1.0.patch: + * Support installer 1.0 changes. +- Specify versions for many of the requirements. +- Stop skipping so many network tests. + +------------------------------------------------------------------- New: ---- support-installer-1.0.patch ----------(New B)---------- New: - Add patch support-installer-1.0.patch: * Support installer 1.0 changes. ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pdm.spec ++++++ --- /var/tmp/diff_new_pack.Lt4SEz/_old 2026-04-14 17:50:09.420096738 +0200 +++ /var/tmp/diff_new_pack.Lt4SEz/_new 2026-04-14 17:50:09.420096738 +0200 @@ -33,6 +33,8 @@ License: MIT URL: https://github.com/pdm-project/pdm/ Source0: https://files.pythonhosted.org/packages/source/p/pdm/pdm-%{version}.tar.gz +# PATCH-FIX-UPSTREAM gh#pdm-project/pdm#3764 +Patch0: support-installer-1.0.patch BuildRequires: %{python_module base >= 3.9} BuildRequires: %{python_module importlib-metadata if %python-base <= 3.9} BuildRequires: %{python_module pdm-backend} @@ -40,35 +42,34 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-blinker -Requires: python-certifi -Requires: python-dep-logic >= 0.4.4 +Requires: python-certifi >= 2024.8.30 +Requires: python-dep-logic >= 0.5 Requires: python-filelock >= 3.13 -Requires: python-findpython >= 0.6 +Requires: python-findpython >= 0.7 Requires: python-hishel >= 1.0.0 -Requires: python-httpcore +Requires: python-httpcore >= 1.0.6 Requires: python-httpx >= 0.20 -Requires: python-id +Requires: python-id >= 1.5.0 Requires: python-installer >= 0.7 Requires: python-packaging >= 22.0 -Requires: python-pbs-installer >= 2024.4.18 +Requires: python-pbs-installer >= 2025.10.7 Requires: python-platformdirs Requires: python-pyproject-hooks Requires: python-python-dotenv >= 0.15 -Requires: python-resolvelib >= 1.0.1 +Requires: python-resolvelib >= 1.1 Requires: python-rich >= 12.3.0 Requires: python-shellingham >= 1.3.2 -Requires: python-unearth >= 0.17.0 +Requires: python-unearth >= 0.17.5 Requires: python-virtualenv >= 20 Requires: (python-tomlkit >= 0.11.1 with python-tomlkit < 1) +%if 0%{?python_version_nodots} < 310 +Requires: python-importlib-metadata >= 3.6 +%endif %if 0%{?python_version_nodots} < 311 Requires: python-tomli >= 1.1.0 %endif -%if 0%{?python_version_nodots} <= 39 -Requires: python-importlib-metadata -Requires: python-typing-extensions -%endif %if 0%{?python_version_nodots} >= 310 -Requires: python-truststore +Requires: python-truststore >= 0.10.4 %endif Requires(post): update-alternatives Requires(postun): update-alternatives @@ -76,10 +77,11 @@ # SECTION test requirements %if %{with test} BuildRequires: %{python_module pdm = %{version}} -BuildRequires: %{python_module pytest-httpserver} -BuildRequires: %{python_module pytest-httpx} +BuildRequires: %{python_module pytest-httpserver >= 1.0.6} +BuildRequires: %{python_module pytest-httpx >= 0.34} BuildRequires: %{python_module pytest-mock} -BuildRequires: %{python_module pytest-xdist} +BuildRequires: %{python_module pytest-rerunfailures >= 10.2} +BuildRequires: %{python_module pytest-xdist >= 1.31} BuildRequires: %{python_module pytest} %endif # /SECTION @@ -124,37 +126,18 @@ donttest="$donttest or test_list_csv_include_exclude or test_remove_editable_packages_while_keeping_normal or test_project_backend" # Requires network donttest="$donttest or test_build_with_no_isolation" -# Requires network -donttest="$donttest or test_find_candidates_from_find_links" -donttest="$donttest or test_build_single_module" -donttest="$donttest or test_build_single_module_with_readme" -donttest="$donttest or test_build_package" -donttest="$donttest or test_build_src_package" -donttest="$donttest or test_build_package_include" -donttest="$donttest or test_build_src_package_by_include" -donttest="$donttest or test_build_with_config_settings" -donttest="$donttest or test_cli_build_with_config_settings" -donttest="$donttest or test_build_ignoring_pip_environment" -donttest="$donttest or test_find_interpreters_with_PDM_IGNORE_ACTIVE_VENV" -donttest="$donttest or test_hooks[build] or test_hooks[publish]" -donttest="$donttest or test_skip_option_from_signal" -donttest="$donttest or test_skip_all_option_from_signal" -donttest="$donttest or test_skip_pre_post_option_from_signal" -donttest="$donttest or test_build_distributions" -donttest="$donttest or test_show_self_package" -donttest="$donttest or test_publish_and_build_in_one_run" -donttest="$donttest or test_expand_project_root_in_url" -donttest="$donttest or test_init_validate_python_requires" -donttest="$donttest or test_init_command" -donttest="$donttest or test_init_command_library" -donttest="$donttest or test_use_command" -donttest="$donttest or test_init_project_respect_version_file" -donttest="$donttest or test_resolve_local_artifacts or test_resolve_two_extras_from_the_same_package or test_resolve_file_req_with_prerelease" donttest="$donttest or test_init_auto_create_venv" +donttest="$donttest or test_expand_project_root_in_url" donttest="$donttest or test_use_python_write_file_with_use_python_version" donttest="$donttest or test_use_python_write_file_without_use_python_version" # Different requires python donttest="$donttest or test_new_command" +# Broken with installer v1 +donttest="$donttest or test_uninstall_with_console_scripts" +donttest="$donttest or test_install_wheel_with_cache" +donttest="$donttest or test_can_install_wheel_with_cache_in_multiple_projects" +donttest="$donttest or test_url_requirement_is_not_cached" +donttest="$donttest or test_install_wheel_with_data_scripts" %pytest -v -k "not ($donttest)" %endif ++++++ support-installer-1.0.patch ++++++ >From 59011ab3cac77866816c9a55ad84ae01e873dce3 Mon Sep 17 00:00:00 2001 From: Maximiliano Curia <[email protected]> Date: Fri, 10 Apr 2026 10:39:03 +0200 Subject: [PATCH] Add make_file_executable to utils Avoid using the installer.utils internal implementation. An implementation detail, the implemented make_file_executable works similar to invoking chmod +x $file, while the previously used installer's version was similar to invoking chmod 755 $file. --- src/pdm/installers/installers.py | 3 ++- src/pdm/models/caches.py | 4 +--- src/pdm/utils.py | 6 ++++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pdm/installers/installers.py b/src/pdm/installers/installers.py index 526e2cad5d..7f6eeb9633 100644 --- a/src/pdm/installers/installers.py +++ b/src/pdm/installers/installers.py @@ -16,6 +16,7 @@ from installer.sources import WheelFile as _WheelFile from pdm.models.cached_package import CachedPackage +from pdm.utils import make_file_executable if TYPE_CHECKING: from typing import Any, BinaryIO, Iterable, Literal @@ -100,7 +101,7 @@ def __init__( def write_to_fs(self, scheme: Scheme, path: str, stream: BinaryIO, is_executable: bool) -> RecordEntry: from installer.records import Hash - from installer.utils import copyfileobj_with_hashing, make_file_executable + from installer.utils import copyfileobj_with_hashing target_path = os.path.join(self.scheme_dict[scheme], path) if os.path.exists(target_path): diff --git a/src/pdm/models/caches.py b/src/pdm/models/caches.py index 6929969b64..93de674fea 100644 --- a/src/pdm/models/caches.py +++ b/src/pdm/models/caches.py @@ -17,7 +17,7 @@ from pdm.models.candidates import Candidate from pdm.models.markers import EnvSpec from pdm.termui import logger -from pdm.utils import atomic_open_for_write, create_tracked_tempdir +from pdm.utils import atomic_open_for_write, create_tracked_tempdir, make_file_executable if TYPE_CHECKING: from httpx import Client @@ -278,8 +278,6 @@ def cache_wheel(self, wheel: Path) -> CachedPackage: """Create a CachedPackage instance from a wheel file""" import zipfile - from installer.utils import make_file_executable - dest = self.root.joinpath(f"{wheel.name}.cache") pkg = CachedPackage(dest, original_wheel=wheel) if dest.exists(): diff --git a/src/pdm/utils.py b/src/pdm/utils.py index d321f2620a..6aae96c59c 100644 --- a/src/pdm/utils.py +++ b/src/pdm/utils.py @@ -605,3 +605,9 @@ def hide_url(url: str) -> HiddenText: netloc = f"*****@{netloc}" redacted = parse.urlunsplit((parsed.scheme, netloc, parsed.path, parsed.query, parsed.fragment)) return HiddenText(url, redacted) + + +def make_file_executable(path: str | Path) -> None: + """Make the file at the provided path executable.""" + path_ = Path(path) + path_.chmod(path_.stat().st_mode | 0o111)
