Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-hatchling for
openSUSE:Factory checked in at 2026-09-21 12:01:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hatchling (Old)
and /work/SRC/openSUSE:Factory/.python-hatchling.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hatchling"
Mon Sep 21 12:01:04 2026 rev:38 rq:1378884 version:1.32.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hatchling/python-hatchling.changes
2026-09-04 12:36:02.867392351 +0200
+++
/work/SRC/openSUSE:Factory/.python-hatchling.new.383539/python-hatchling.changes
2026-09-21 12:01:22.556601012 +0200
@@ -1,0 +2,10 @@
+Fri Sep 18 18:12:59 UTC 2026 - BenoƮt Monin <[email protected]>
+
+- update to version 1.32.3:
+ * Fixed: Preserve the version string exactly as written in
+ core metadata, so stylized versions such as CalVer 2026.08.10
+ are no longer stripped of leading zeros. Distribution file
+ names and .dist-info directories continue to use the PEP 440
+ normalized form.
+
+-------------------------------------------------------------------
Old:
----
hatchling-1.32.0.tar.gz
New:
----
hatchling-1.32.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-hatchling.spec ++++++
--- /var/tmp/diff_new_pack.PqBgGp/_old 2026-09-21 12:01:23.673647861 +0200
+++ /var/tmp/diff_new_pack.PqBgGp/_new 2026-09-21 12:01:23.674647903 +0200
@@ -24,7 +24,7 @@
%{?pythons_for_pypi}
%{?sle15_python_module_pythons}
Name: python-hatchling
-Version: 1.32.0
+Version: 1.32.3
Release: 0
Summary: Build backend used by Hatch
License: MIT
++++++ hatchling-1.32.0.tar.gz -> hatchling-1.32.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/PKG-INFO
new/hatchling-1.32.3/PKG-INFO
--- old/hatchling-1.32.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.5
Name: hatchling
-Version: 1.32.0
+Version: 1.32.3
Summary: Modern, extensible Python build backend
Project-URL: Homepage, https://hatch.pypa.io/latest/
Project-URL: Sponsor, https://github.com/sponsors/ofek
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/__about__.py
new/hatchling-1.32.3/src/hatchling/__about__.py
--- old/hatchling-1.32.0/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-__version__ = "1.32.0"
+__version__ = "1.32.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/binary.py
new/hatchling-1.32.3/src/hatchling/builders/binary.py
--- old/hatchling-1.32.0/src/hatchling/builders/binary.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/binary.py 2020-02-02
01:00:00.000000000 +0100
@@ -6,12 +6,13 @@
from hatchling.builders.config import BuilderConfig
from hatchling.builders.plugin.interface import BuilderInterface
+from hatchling.plugin.manager import PluginManager
if TYPE_CHECKING:
from collections.abc import Callable
-class BinaryBuilderConfig(BuilderConfig):
+class BinaryBuilderConfig(BuilderConfig[PluginManager]):
SUPPORTED_VERSIONS = ("3.12", "3.11", "3.10", "3.9", "3.8", "3.7")
def __init__(self, *args: Any, **kwargs: Any) -> None:
@@ -82,7 +83,7 @@
return self.__pyapp_version
-class BinaryBuilder(BuilderInterface):
+class BinaryBuilder(BuilderInterface[BinaryBuilderConfig, PluginManager]):
"""
Build binaries
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/config.py
new/hatchling-1.32.3/src/hatchling/builders/config.py
--- old/hatchling-1.32.0/src/hatchling/builders/config.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/config.py 2020-02-02
01:00:00.000000000 +0100
@@ -3,25 +3,28 @@
import os
from contextlib import contextmanager
from functools import cached_property
-from typing import TYPE_CHECKING, Any, TypeVar
+from typing import TYPE_CHECKING, Any, Generic, TypeVar
import pathspec
from hatchling.builders.constants import DEFAULT_BUILD_DIRECTORY,
EXCLUDED_DIRECTORIES, BuildEnvVars
from hatchling.builders.utils import normalize_inclusion_map,
normalize_relative_directory, normalize_relative_path
from hatchling.metadata.utils import normalize_project_name
+from hatchling.plugin.manager import PluginManagerBound
from hatchling.utils.fs import locate_file
if TYPE_CHECKING:
from collections.abc import Generator
+ from typing_extensions import Self
+
from hatchling.builders.plugin.interface import BuilderInterface
-class BuilderConfig:
+class BuilderConfig(Generic[PluginManagerBound]):
def __init__(
self,
- builder: BuilderInterface,
+ builder: BuilderInterface[Self, PluginManagerBound],
root: str,
plugin_name: str,
build_config: dict[str, Any],
@@ -43,7 +46,7 @@
self.build_reserved_paths: set[str] = set()
@property
- def builder(self) -> BuilderInterface:
+ def builder(self) -> BuilderInterface[Self, PluginManagerBound]:
return self.__builder
@property
@@ -861,4 +864,4 @@
return default
-BuilderConfigBound = TypeVar("BuilderConfigBound", bound=BuilderConfig)
+BuilderConfigBound = TypeVar("BuilderConfigBound", bound=BuilderConfig[Any])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/custom.py
new/hatchling-1.32.3/src/hatchling/builders/custom.py
--- old/hatchling-1.32.0/src/hatchling/builders/custom.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/custom.py 2020-02-02
01:00:00.000000000 +0100
@@ -21,9 +21,9 @@
root: str,
plugin_manager: PluginManagerBound | None = None,
config: dict[str, Any] | None = None,
- metadata: ProjectMetadata | None = None,
+ metadata: ProjectMetadata[PluginManagerBound] | None = None,
app: Application | None = None,
- ) -> BuilderInterface:
+ ) -> BuilderInterface[Any, PluginManagerBound]:
project_metadata = ProjectMetadata(root, plugin_manager, config)
target_config =
project_metadata.hatch.build_targets.get(cls.PLUGIN_NAME, {})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hatchling-1.32.0/src/hatchling/builders/hooks/plugin/interface.py
new/hatchling-1.32.3/src/hatchling/builders/hooks/plugin/interface.py
--- old/hatchling-1.32.0/src/hatchling/builders/hooks/plugin/interface.py
2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/hooks/plugin/interface.py
2020-02-02 01:00:00.000000000 +0100
@@ -3,21 +3,25 @@
from typing import TYPE_CHECKING, Any, Generic, cast
from hatchling.builders.config import BuilderConfigBound
+from hatchling.plugin.manager import PluginManagerBound
if TYPE_CHECKING:
from hatchling.bridge.app import Application
from hatchling.metadata.core import ProjectMetadata
-class BuildHookInterface(Generic[BuilderConfigBound]): # no cov
+class BuildHookInterface(Generic[BuilderConfigBound, PluginManagerBound]): #
no cov
"""
Example usage:
```python tab="plugin.py"
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
+ from hatchling.plugin.manager import PluginManager
+ from .builder import SpecialBuilderConfig
- class SpecialBuildHook(BuildHookInterface):
+
+ class SpecialBuildHook(BuildHookInterface[SpecialBuilderConfig,
PluginManager]):
PLUGIN_NAME = "special"
...
```
@@ -42,7 +46,7 @@
root: str,
config: dict[str, Any],
build_config: BuilderConfigBound,
- metadata: ProjectMetadata,
+ metadata: ProjectMetadata[PluginManagerBound],
directory: str,
target_name: str,
app: Application | None = None,
@@ -87,7 +91,7 @@
return self.__config
@property
- def metadata(self) -> ProjectMetadata:
+ def metadata(self) -> ProjectMetadata[PluginManagerBound]:
# Undocumented for now
return self.__metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hatchling-1.32.0/src/hatchling/builders/plugin/hooks.py
new/hatchling-1.32.3/src/hatchling/builders/plugin/hooks.py
--- old/hatchling-1.32.0/src/hatchling/builders/plugin/hooks.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/plugin/hooks.py 2020-02-02
01:00:00.000000000 +0100
@@ -15,4 +15,4 @@
@hookimpl
def hatch_register_builder() -> list[type[BuilderInterface]]:
- return [AppBuilder, BinaryBuilder, CustomBuilder, SdistBuilder,
WheelBuilder] # type: ignore[list-item]
+ return [AppBuilder, BinaryBuilder, CustomBuilder, SdistBuilder,
WheelBuilder]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hatchling-1.32.0/src/hatchling/builders/plugin/interface.py
new/hatchling-1.32.3/src/hatchling/builders/plugin/interface.py
--- old/hatchling-1.32.0/src/hatchling/builders/plugin/interface.py
2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/plugin/interface.py
2020-02-02 01:00:00.000000000 +0100
@@ -32,11 +32,20 @@
Example usage:
```python tab="plugin.py"
+ from hatchling.builders.config import BuilderConfig
from hatchling.builders.plugin.interface import BuilderInterface
+ from hatchling.plugin.manager import PluginManager
- class SpecialBuilder(BuilderInterface):
+ class SpecialBuilderConfig(BuilderConfig[PluginManager]): ...
+
+
+ class SpecialBuilder(BuilderInterface[SpecialBuilderConfig,
PluginManager]):
PLUGIN_NAME = "special"
+
+ def get_config_class(self) -> type[SpecialBuilderConfig]:
+ return SpecialBuilderConfig
+
...
```
@@ -47,7 +56,7 @@
@hookimpl
- def hatch_register_builder():
+ def hatch_register_builder() -> type[SpecialBuilder]:
return SpecialBuilder
```
"""
@@ -60,7 +69,7 @@
root: str,
plugin_manager: PluginManagerBound | None = None,
config: dict[str, Any] | None = None,
- metadata: ProjectMetadata | None = None,
+ metadata: ProjectMetadata[PluginManagerBound] | None = None,
app: Application | None = None,
) -> None:
self.__root = root
@@ -283,12 +292,12 @@
if self.__plugin_manager is None:
from hatchling.plugin.manager import PluginManager
- self.__plugin_manager = PluginManager()
+ self.__plugin_manager = cast(PluginManagerBound, PluginManager())
return self.__plugin_manager
@property
- def metadata(self) -> ProjectMetadata:
+ def metadata(self) -> ProjectMetadata[PluginManagerBound]:
if self.__metadata is None:
from hatchling.metadata.core import ProjectMetadata
@@ -400,7 +409,7 @@
Each callable must have the following signature:
```python
- def ...(build_dir: str, build_data: dict) -> str:
+ def ...(build_dir: str, **build_data: dict) -> str:
```
The return value must be the absolute path to the built artifact.
@@ -429,11 +438,11 @@
"""
@classmethod
- def get_config_class(cls) -> type[BuilderConfig]:
+ def get_config_class(cls) -> type[BuilderConfigBound]:
"""
Must return a subclass of
[BuilderConfig](../utilities.md#hatchling.builders.config.BuilderConfig).
"""
- return BuilderConfig
+ return cast(type[BuilderConfigBound], BuilderConfig)
@staticmethod
def normalize_file_name_component(file_name: str) -> str:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/sdist.py
new/hatchling-1.32.3/src/hatchling/builders/sdist.py
--- old/hatchling-1.32.0/src/hatchling/builders/sdist.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/sdist.py 2020-02-02
01:00:00.000000000 +0100
@@ -21,6 +21,7 @@
replace_file,
)
from hatchling.metadata.spec import DEFAULT_METADATA_VERSION,
get_core_metadata_constructors
+from hatchling.plugin.manager import PluginManager
from hatchling.utils.constants import DEFAULT_BUILD_SCRIPT, DEFAULT_CONFIG_FILE
if TYPE_CHECKING:
@@ -87,7 +88,7 @@
self.fd.close()
-class SdistBuilderConfig(BuilderConfig):
+class SdistBuilderConfig(BuilderConfig[PluginManager]):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
@@ -142,7 +143,7 @@
return self.__support_legacy
-class SdistBuilder(BuilderInterface):
+class SdistBuilder(BuilderInterface[SdistBuilderConfig, PluginManager]):
"""
Build an archive of the source files
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/utils.py
new/hatchling-1.32.3/src/hatchling/builders/utils.py
--- old/hatchling-1.32.0/src/hatchling/builders/utils.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/utils.py 2020-02-02
01:00:00.000000000 +0100
@@ -32,7 +32,7 @@
yield root, dirs, files
-def get_known_python_major_versions() -> map:
+def get_known_python_major_versions() -> map[str]:
return map(str, sorted((2, 3)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/builders/wheel.py
new/hatchling-1.32.3/src/hatchling/builders/wheel.py
--- old/hatchling-1.32.0/src/hatchling/builders/wheel.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/builders/wheel.py 2020-02-02
01:00:00.000000000 +0100
@@ -27,6 +27,7 @@
set_zip_info_mode,
)
from hatchling.metadata.spec import DEFAULT_METADATA_VERSION,
get_core_metadata_constructors
+from hatchling.plugin.manager import PluginManager
if TYPE_CHECKING:
from collections.abc import Callable, Iterable, Sequence
@@ -214,7 +215,7 @@
self.fd.close()
-class WheelBuilderConfig(BuilderConfig):
+class WheelBuilderConfig(BuilderConfig[PluginManager]):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
@@ -492,7 +493,7 @@
return name
-class WheelBuilder(BuilderInterface):
+class WheelBuilder(BuilderInterface[WheelBuilderConfig, PluginManager]):
"""
Build a binary distribution (.whl file)
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/metadata/core.py
new/hatchling-1.32.3/src/hatchling/metadata/core.py
--- old/hatchling-1.32.0/src/hatchling/metadata/core.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/metadata/core.py 2020-02-02
01:00:00.000000000 +0100
@@ -57,6 +57,7 @@
self._dynamic: list[str] | None = None
self._name: str | None = None
self._version: str | None = None
+ self._original_version: str | None = None
self._project_file: str | None = None
# App already loaded config
@@ -154,6 +155,20 @@
return self._version
@property
+ def original_version(self) -> str:
+ """
+ The version as written by the user, before PEP 440 normalization.
+
+ The normalized `version` is used for distribution file names and
`.dist-info`
+ directories, but core metadata records the original string so that
stylized
+ versions (e.g. CalVer `2026.08.10`) appear as intended on package
indexes.
+ """
+ if self._original_version is None:
+ self._version = self._get_version()
+
+ return cast(str, self._original_version)
+
+ @property
def config(self) -> dict[str, Any]:
if self._config is None:
project_file = locate_file(self.root, "pyproject.toml")
@@ -260,6 +275,7 @@
message = f"Invalid version `{version}` from {source}, see
https://peps.python.org/pep-0440/"
raise ValueError(message) from None
else:
+ self._original_version = version
return normalized_version
def validate_fields(self) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/metadata/spec.py
new/hatchling-1.32.3/src/hatchling/metadata/spec.py
--- old/hatchling-1.32.0/src/hatchling/metadata/spec.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/metadata/spec.py 2020-02-02
01:00:00.000000000 +0100
@@ -216,13 +216,13 @@
return metadata
-def construct_metadata_file_1_2(metadata: ProjectMetadata, extra_dependencies:
tuple[str] | None = None) -> str:
+def construct_metadata_file_1_2(metadata: ProjectMetadata[Any],
extra_dependencies: tuple[str] | None = None) -> str:
"""
https://peps.python.org/pep-0345/
"""
metadata_file = "Metadata-Version: 1.2\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.description:
metadata_file += f"Summary: {metadata.core.description}\n"
@@ -277,13 +277,13 @@
return metadata_file
-def construct_metadata_file_2_1(metadata: ProjectMetadata, extra_dependencies:
tuple[str] | None = None) -> str:
+def construct_metadata_file_2_1(metadata: ProjectMetadata[Any],
extra_dependencies: tuple[str] | None = None) -> str:
"""
https://peps.python.org/pep-0566/
"""
metadata_file = "Metadata-Version: 2.1\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.description:
metadata_file += f"Summary: {metadata.core.description}\n"
@@ -354,13 +354,13 @@
return metadata_file
-def construct_metadata_file_2_2(metadata: ProjectMetadata, extra_dependencies:
tuple[str] | None = None) -> str:
+def construct_metadata_file_2_2(metadata: ProjectMetadata[Any],
extra_dependencies: tuple[str] | None = None) -> str:
"""
https://peps.python.org/pep-0643/
"""
metadata_file = "Metadata-Version: 2.2\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.dynamic:
# Ordered set
@@ -440,13 +440,13 @@
return metadata_file
-def construct_metadata_file_2_3(metadata: ProjectMetadata, extra_dependencies:
tuple[str] | None = None) -> str:
+def construct_metadata_file_2_3(metadata: ProjectMetadata[Any],
extra_dependencies: tuple[str] | None = None) -> str:
"""
https://peps.python.org/pep-0685/
"""
metadata_file = "Metadata-Version: 2.3\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.dynamic:
# Ordered set
@@ -526,13 +526,13 @@
return metadata_file
-def construct_metadata_file_2_4(metadata: ProjectMetadata, extra_dependencies:
tuple[str] | None = None) -> str:
+def construct_metadata_file_2_4(metadata: ProjectMetadata[Any],
extra_dependencies: tuple[str] | None = None) -> str:
"""
https://peps.python.org/pep-0639/
"""
metadata_file = "Metadata-Version: 2.4\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.dynamic:
# Ordered set
@@ -623,7 +623,7 @@
"""
metadata_file = "Metadata-Version: 2.5\n"
metadata_file += f"Name: {metadata.core.raw_name}\n"
- metadata_file += f"Version: {metadata.version}\n"
+ metadata_file += f"Version: {metadata.original_version}\n"
if metadata.core.import_names is not None:
if not metadata.core.import_names and not
metadata.core.import_namespaces:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.32.0/src/hatchling/metadata/utils.py
new/hatchling-1.32.3/src/hatchling/metadata/utils.py
--- old/hatchling-1.32.0/src/hatchling/metadata/utils.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.32.3/src/hatchling/metadata/utils.py 2020-02-02
01:00:00.000000000 +0100
@@ -65,7 +65,7 @@
return format_dependency(requirement)
-def resolve_metadata_fields(metadata: ProjectMetadata) -> dict[str, Any]:
+def resolve_metadata_fields(metadata: ProjectMetadata[Any]) -> dict[str, Any]:
#
https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
return {
"name": metadata.core.name,