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))

Reply via email to