Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pdm-backend for openSUSE:Factory checked in at 2026-04-11 22:22:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pdm-backend (Old) and /work/SRC/openSUSE:Factory/.python-pdm-backend.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pdm-backend" Sat Apr 11 22:22:37 2026 rev:9 rq:1345075 version:2.4.8 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pdm-backend/python-pdm-backend.changes 2026-03-10 17:46:47.395390977 +0100 +++ /work/SRC/openSUSE:Factory/.python-pdm-backend.new.21863/python-pdm-backend.changes 2026-04-11 22:22:38.823225708 +0200 @@ -1,0 +2,7 @@ +Tue Apr 7 21:44:16 UTC 2026 - Dirk Müller <[email protected]> + +- update to 2.4.8: + * Support omitting source in version table when path is + declared + +------------------------------------------------------------------- Old: ---- pdm_backend-2.4.7.tar.gz New: ---- pdm_backend-2.4.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pdm-backend.spec ++++++ --- /var/tmp/diff_new_pack.uOUfIk/_old 2026-04-11 22:22:39.719262387 +0200 +++ /var/tmp/diff_new_pack.uOUfIk/_new 2026-04-11 22:22:39.719262387 +0200 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-pdm-backend -Version: 2.4.7 +Version: 2.4.8 Release: 0 Summary: Backend used by PDM License: MIT ++++++ pdm_backend-2.4.7.tar.gz -> pdm_backend-2.4.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/PKG-INFO new/pdm_backend-2.4.8/PKG-INFO --- old/pdm_backend-2.4.7/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/pdm_backend-2.4.8/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: pdm-backend -Version: 2.4.7 +Version: 2.4.8 Summary: The build backend used by PDM that supports latest packaging standards Keywords: packaging,PEP 517,build Author-Email: Frost Ming <[email protected]> @@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 Project-URL: Homepage, https://github.com/pdm-project/pdm-backend Project-URL: Repository, https://github.com/pdm-project/pdm-backend Project-URL: Documentation, https://backend.pdm-project.org diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/pyproject.toml new/pdm_backend-2.4.8/pyproject.toml --- old/pdm_backend-2.4.7/pyproject.toml 2026-01-29 11:52:04.033510700 +0100 +++ new/pdm_backend-2.4.8/pyproject.toml 2026-04-02 04:41:46.435585700 +0200 @@ -25,11 +25,12 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] dependencies = [ "importlib-metadata>=3.6; python_version < \"3.10\"", ] -version = "2.4.7" +version = "2.4.8" [project.urls] Homepage = "https://github.com/pdm-project/pdm-backend" @@ -47,7 +48,7 @@ src = [ "src", ] -target-version = "py38" +target-version = "py39" exclude = [ "tests/fixtures", ] @@ -146,7 +147,6 @@ dev = [ "editables>=0.3", "pre-commit>=2.21.0", - "vendoring>=1.2.0; python_version ~= \"3.8\"", ] docs = [ "mkdocs>=1.4.2", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/__init__.py new/pdm_backend-2.4.8/src/pdm/backend/__init__.py --- old/pdm_backend-2.4.7/src/pdm/backend/__init__.py 2026-01-29 11:51:55.056493000 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/__init__.py 2026-04-02 04:41:37.966540000 +0200 @@ -4,8 +4,9 @@ from __future__ import annotations +from collections.abc import Mapping from pathlib import Path -from typing import Any, Mapping +from typing import Any def get_requires_for_build_wheel( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/base.py new/pdm_backend-2.4.8/src/pdm/backend/base.py --- old/pdm_backend-2.4.7/src/pdm/backend/base.py 2026-01-29 11:51:55.059493000 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/base.py 2026-04-02 04:41:37.968780500 +0200 @@ -4,17 +4,10 @@ import os import shutil import sys +from collections.abc import Iterable, Mapping from fnmatch import fnmatch from pathlib import Path -from typing import ( - TYPE_CHECKING, - Any, - Iterable, - Literal, - Mapping, - TypeVar, - cast, -) +from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast from pdm.backend._vendor.pyproject_metadata import StandardMetadata from pdm.backend.config import Config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/hooks/base.py new/pdm_backend-2.4.8/src/pdm/backend/hooks/base.py --- old/pdm_backend-2.4.7/src/pdm/backend/hooks/base.py 2026-01-29 11:51:55.059493000 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/hooks/base.py 2026-04-02 04:41:37.969474300 +0200 @@ -1,8 +1,9 @@ from __future__ import annotations import dataclasses +from collections.abc import Iterable from pathlib import Path -from typing import TYPE_CHECKING, Any, Iterable +from typing import TYPE_CHECKING, Any from pdm.backend.config import Config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/hooks/version/__init__.py new/pdm_backend-2.4.8/src/pdm/backend/hooks/version/__init__.py --- old/pdm_backend-2.4.7/src/pdm/backend/hooks/version/__init__.py 2026-01-29 11:51:55.059493000 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/hooks/version/__init__.py 2026-04-02 04:41:37.969474300 +0200 @@ -51,8 +51,13 @@ ) source: str = version_config.get("source") if not source: - raise ConfigError("tool.pdm.version.source is required") - if source not in self.supported_sources: + if (path := version_config.get("path", "")) and ( + context.root.joinpath(path).exists() + ): + source = "file" + else: + raise ConfigError("tool.pdm.version.source is required") + elif source not in self.supported_sources: warnings.warn( f"Invalid version source {source}, must be one of " f"{', '.join(self.supported_sources)}", @@ -65,17 +70,31 @@ ) metadata["dynamic"].remove("version") - def resolve_version_from_file(self, context: Context, path: str) -> Version: + def resolve_version_from_file( + self, context: Context, path: str, pattern: str | None = None + ) -> Version: """Resolve version from a file.""" version_source = context.root / path - with open(version_source, encoding="utf-8") as fp: - match = re.search( - r"^__version__\s*=\s*[\"'](.+?)[\"']\s*(?:#.*)?$", fp.read(), re.M - ) + text = version_source.read_text(encoding="utf-8") + if pattern is not None: + if not (match := re.search(pattern, text, re.M)): + raise ConfigError( + f"Couldn't find version in file {version_source!r} by {pattern=}" + ) + try: + value = match.group(1) + except IndexError as e: + raise ConfigError( + f"Invalid version pattern ({pattern!r}), should contains '(' and ')'" + ) from e + return Version(value) + match = re.search( + r"^(?:__version__|VERSION)\s*=\s*[\"'](.+?)[\"']\s*(?:#.*)?$", text, re.M + ) if not match: raise ConfigError( f"Couldn't find version in file {version_source!r}, " - "it should appear as `__version__ = 'a.b.c'`.", + "it should appear as `__version__ = 'a.b.c'` or `VERSION = 'a.b.c'`.", ) return Version(match.group(1)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/intree.py new/pdm_backend-2.4.8/src/pdm/backend/intree.py --- old/pdm_backend-2.4.7/src/pdm/backend/intree.py 2026-01-29 11:51:55.060493200 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/intree.py 2026-04-02 04:41:37.969668400 +0200 @@ -1,7 +1,8 @@ from __future__ import annotations import sys -from typing import Any, Mapping +from collections.abc import Mapping +from typing import Any from pdm.backend import build_editable as build_editable from pdm.backend import build_sdist as build_sdist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/sdist.py new/pdm_backend-2.4.8/src/pdm/backend/sdist.py --- old/pdm_backend-2.4.7/src/pdm/backend/sdist.py 2026-01-29 11:51:55.060493200 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/sdist.py 2026-04-02 04:41:37.969668400 +0200 @@ -2,11 +2,11 @@ import os import tarfile +from collections.abc import Iterable from copy import copy from io import BytesIO from pathlib import Path from posixpath import join as pjoin -from typing import Iterable from pdm.backend._vendor.packaging.utils import canonicalize_name from pdm.backend.base import Builder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/structures.py new/pdm_backend-2.4.8/src/pdm/backend/structures.py --- old/pdm_backend-2.4.7/src/pdm/backend/structures.py 2026-01-29 11:51:55.060493200 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/structures.py 2026-04-02 04:41:37.969668400 +0200 @@ -1,8 +1,9 @@ from __future__ import annotations import os +from collections.abc import Iterator, MutableMapping from pathlib import Path -from typing import Any, Iterator, MutableMapping +from typing import Any class Table(MutableMapping[str, Any]): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/utils.py new/pdm_backend-2.4.8/src/pdm/backend/utils.py --- old/pdm_backend-2.4.7/src/pdm/backend/utils.py 2026-01-29 11:51:55.060493200 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/utils.py 2026-04-02 04:41:37.969668400 +0200 @@ -9,9 +9,11 @@ import sys import types import urllib.parse +from collections.abc import Generator, Iterable from fnmatch import fnmatchcase from pathlib import Path -from typing import Any, Callable, Generator, Iterable, Match +from re import Match +from typing import Any, Callable from pdm.backend._vendor.packaging.markers import Marker from pdm.backend._vendor.packaging.requirements import Requirement diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/src/pdm/backend/wheel.py new/pdm_backend-2.4.8/src/pdm/backend/wheel.py --- old/pdm_backend-2.4.7/src/pdm/backend/wheel.py 2026-01-29 11:51:55.060493200 +0100 +++ new/pdm_backend-2.4.8/src/pdm/backend/wheel.py 2026-04-02 04:41:37.969781000 +0200 @@ -11,9 +11,10 @@ import time import zipfile from base64 import urlsafe_b64encode +from collections.abc import Iterable, Mapping from importlib.metadata import version as get_version from pathlib import Path -from typing import IO, Any, Iterable, Mapping, NamedTuple, cast +from typing import IO, Any, NamedTuple, cast from pdm.backend._vendor.packaging import tags from pdm.backend._vendor.packaging.specifiers import SpecifierSet diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/tests/fixtures/projects/demo-src-package/pyproject.toml new/pdm_backend-2.4.8/tests/fixtures/projects/demo-src-package/pyproject.toml --- old/pdm_backend-2.4.7/tests/fixtures/projects/demo-src-package/pyproject.toml 2026-01-29 11:51:55.065493000 +0100 +++ new/pdm_backend-2.4.8/tests/fixtures/projects/demo-src-package/pyproject.toml 2026-04-02 04:41:37.975020600 +0200 @@ -15,5 +15,5 @@ [project.optional-dependencies] -[tool.pdm] -version = {source = "file", path = "src/my_package/__init__.py" } +[tool.pdm.version] +path = "src/my_package/__init__.py" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm_backend-2.4.7/tests/test_api.py new/pdm_backend-2.4.8/tests/test_api.py --- old/pdm_backend-2.4.7/tests/test_api.py 2026-01-29 11:51:55.066493300 +0100 +++ new/pdm_backend-2.4.8/tests/test_api.py 2026-04-02 04:41:37.975738000 +0200 @@ -107,6 +107,21 @@ assert "my_package/__init__.py" in zip_names assert "my_package/data.json" in zip_names + version_file = Path("src/my_package/__init__.py") + version_file.write_text('VERSION = "0.1.1"') + wheel_name = api.build_wheel(dist.as_posix()) + sdist_name = api.build_sdist(dist.as_posix()) + assert sdist_name == "demo_package-0.1.1.tar.gz" + assert wheel_name == "demo_package-0.1.1-py3-none-any.whl" + + version_file.write_text('__VERSION__ = "0.1.2"') + with Path("pyproject.toml").open("a+") as f: + f.write('pattern = \'__VERSION__ = "([^"]+)"\'') + wheel_name = api.build_wheel(dist.as_posix()) + sdist_name = api.build_sdist(dist.as_posix()) + assert sdist_name == "demo_package-0.1.2.tar.gz" + assert wheel_name == "demo_package-0.1.2-py3-none-any.whl" + @pytest.mark.parametrize("name", ["demo-package-include"]) def test_build_package_include(dist: Path) -> None:
