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-03-01 22:13:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hatchling (Old)
and /work/SRC/openSUSE:Factory/.python-hatchling.new.29461 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hatchling"
Sun Mar 1 22:13:44 2026 rev:34 rq:1335263 version:1.29.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hatchling/python-hatchling.changes
2026-02-06 21:30:07.685664096 +0100
+++
/work/SRC/openSUSE:Factory/.python-hatchling.new.29461/python-hatchling.changes
2026-03-01 22:13:47.623420746 +0100
@@ -1,0 +2,7 @@
+Tue Feb 24 19:50:58 UTC 2026 - BenoƮt Monin <[email protected]>
+
+- update to version 1.29.0:
+ * Fixed: Source Date Epoch no longer fails when set to date
+ before 1980.
+
+-------------------------------------------------------------------
Old:
----
hatchling-1.28.0.tar.gz
New:
----
hatchling-1.29.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-hatchling.spec ++++++
--- /var/tmp/diff_new_pack.jIuvtr/_old 2026-03-01 22:13:48.151442447 +0100
+++ /var/tmp/diff_new_pack.jIuvtr/_new 2026-03-01 22:13:48.155442611 +0100
@@ -24,7 +24,7 @@
%{?pythons_for_pypi}
%{?sle15_python_module_pythons}
Name: python-hatchling
-Version: 1.28.0
+Version: 1.29.0
Release: 0
Summary: Build backend used by Hatch
License: MIT
++++++ hatchling-1.28.0.tar.gz -> hatchling-1.29.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.28.0/PKG-INFO
new/hatchling-1.29.0/PKG-INFO
--- old/hatchling-1.28.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.29.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: hatchling
-Version: 1.28.0
+Version: 1.29.0
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.28.0/src/hatchling/__about__.py
new/hatchling-1.29.0/src/hatchling/__about__.py
--- old/hatchling-1.28.0/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.29.0/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-__version__ = "1.28.0"
+__version__ = "1.29.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.28.0/src/hatchling/builders/wheel.py
new/hatchling-1.29.0/src/hatchling/builders/wheel.py
--- old/hatchling-1.28.0/src/hatchling/builders/wheel.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.29.0/src/hatchling/builders/wheel.py 2020-02-02
01:00:00.000000000 +0100
@@ -88,7 +88,9 @@
def get_reproducible_time_tuple() -> TIME_TUPLE:
from datetime import datetime, timezone
- d = datetime.fromtimestamp(get_reproducible_timestamp(), timezone.utc)
+ # `zipfile.ZipInfo` does not support timestamps before 1980
+ min_ts = 315532800 # 1980-01-01T00:00:00Z
+ d = datetime.fromtimestamp(max(get_reproducible_timestamp(), min_ts),
timezone.utc)
return d.year, d.month, d.day, d.hour, d.minute, d.second
def add_file(self, included_file: IncludedFile) -> tuple[str, str, str]:
@@ -684,8 +686,9 @@
record = archive.write_shared_script(shared_script,
content.getvalue())
records.write(record)
- def add_sboms(self, archive: WheelArchive, records: RecordFile) -> None:
+ def add_sboms(self, archive: WheelArchive, records: RecordFile,
build_data: dict[str, Any]) -> None:
sbom_files = self.config.sbom_files
+ sbom_files.extend(build_data["sbom_files"])
if not sbom_files:
return
@@ -724,7 +727,7 @@
self.add_licenses(archive, records)
# sboms/
- self.add_sboms(archive, records)
+ self.add_sboms(archive, records, build_data)
# extra_metadata/ - write last
self.add_extra_metadata(archive, records, build_data)
@@ -849,6 +852,7 @@
"extra_metadata": {},
"shared_data": {},
"shared_scripts": {},
+ "sbom_files": [],
}
def get_forced_inclusion_map(self, build_data: dict[str, Any]) ->
dict[str, str]:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hatchling-1.28.0/src/hatchling/version/scheme/standard.py
new/hatchling-1.29.0/src/hatchling/version/scheme/standard.py
--- old/hatchling-1.28.0/src/hatchling/version/scheme/standard.py
2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.29.0/src/hatchling/version/scheme/standard.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Any, cast
+from typing import TYPE_CHECKING, Any, Literal, cast
from hatchling.version.scheme.plugin.interface import VersionSchemeInterface
@@ -28,13 +28,15 @@
for version in versions:
if version == "release":
- reset_version_parts(original, release=original.release)
+ original = reset_version_parts(original,
release=original.release)
elif version == "major":
- reset_version_parts(original, release=update_release(original,
[original.major + 1]))
+ original = reset_version_parts(original,
release=update_release(original, [original.major + 1]))
elif version == "minor":
- reset_version_parts(original, release=update_release(original,
[original.major, original.minor + 1]))
+ original = reset_version_parts(
+ original, release=update_release(original,
[original.major, original.minor + 1])
+ )
elif version in {"micro", "patch", "fix"}:
- reset_version_parts(
+ original = reset_version_parts(
original, release=update_release(original,
[original.major, original.minor, original.micro + 1])
)
elif version in {"a", "b", "c", "rc", "alpha", "beta", "pre",
"preview"}:
@@ -44,13 +46,13 @@
if phase == current_phase:
number = current_number + 1
- reset_version_parts(original, pre=(phase, number))
+ original = reset_version_parts(original, pre=(phase, number))
elif version in {"post", "rev", "r"}:
number = 0 if original.post is None else original.post + 1
- reset_version_parts(original,
post=parse_letter_version(version, number))
+ original = reset_version_parts(original, post=number)
elif version == "dev":
number = 0 if original.dev is None else original.dev + 1
- reset_version_parts(original, dev=(version, number))
+ original = reset_version_parts(original, dev=number)
else:
if len(versions) > 1:
message = "Cannot specify multiple update operations with
an explicit version"
@@ -66,9 +68,13 @@
return str(original)
-def reset_version_parts(version: Version, **kwargs: Any) -> None:
- #
https://github.com/pypa/packaging/blob/20.9/packaging/version.py#L301-L310
- internal_version = version._version # noqa: SLF001
+def reset_version_parts(version: Version, **kwargs: Any) -> Version:
+ """
+ Update version parts and clear all subsequent parts in the sequence.
+
+ When __replace__ is available (packaging 26.0+), returns a new Version
instance.
+ Otherwise mutates version via private ._version and returns the same
instance.
+ """
parts: dict[str, Any] = {}
ordered_part_names = ("epoch", "release", "pre", "post", "dev", "local")
@@ -80,9 +86,16 @@
parts[part_name] = kwargs[part_name]
reset = True
else:
- parts[part_name] = getattr(internal_version, part_name)
+ parts[part_name] = getattr(version, part_name)
+
+ # Use __replace__ if available for efficiency
+ if hasattr(version, "__replace__"):
+ return version.__replace__(**parts)
+ # Reference:
https://github.com/pypa/packaging/blob/20.9/packaging/version.py#L301-L310
+ internal_version = version._version # noqa: SLF001
version._version = type(internal_version)(**parts) # noqa: SLF001
+ return version
def update_release(original_version: Version, new_release_parts: list[int]) ->
tuple[int, ...]:
@@ -92,7 +105,7 @@
return tuple(new_release_parts)
-def parse_letter_version(*args: Any, **kwargs: Any) -> tuple[str, int]:
+def parse_letter_version(*args: Any, **kwargs: Any) -> tuple[Literal["a", "b",
"rc"], int]:
from packaging.version import _parse_letter_version # noqa: PLC2701
- return cast(tuple[str, int], _parse_letter_version(*args, **kwargs))
+ return cast(tuple[Literal["a", "b", "rc"], int],
_parse_letter_version(*args, **kwargs))