Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-frozenlist for 
openSUSE:Factory checked in at 2025-09-26 22:24:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-frozenlist (Old)
 and      /work/SRC/openSUSE:Factory/.python-frozenlist.new.11973 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-frozenlist"

Fri Sep 26 22:24:13 2025 rev:12 rq:1307100 version:1.7.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-frozenlist/python-frozenlist.changes      
2025-06-10 08:57:01.834941670 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-frozenlist.new.11973/python-frozenlist.changes
   2025-09-26 22:24:52.214889913 +0200
@@ -1,0 +2,18 @@
+Thu Sep 25 11:08:56 UTC 2025 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to 1.7.0
+  * Added deepcopy support to FrozenList
+  * Fixed an issue where ``frozenlist`` binary wheels would be
+    built with debugging symbols and line tracing enabled, which
+    significantly impacted performance. Line tracing is now disabled
+    by default and can only be enabled explicitly
+    - This change ensures that production builds are optimized for
+      performance. Developers who need line tracing for debugging
+      purposes can still enable it by:
+      1. Setting the ``FROZENLIST_CYTHON_TRACING`` environment variable
+      2. Using the ``--config-setting=with-cython-tracing=true`` option with 
pip
+  * Enabled ``PIP_CONSTRAINT`` environment variable in the build configuration
+    to ensure the pinned Cython version from ``requirements/cython.txt`` is
+    used during wheel builds.
+
+-------------------------------------------------------------------

Old:
----
  frozenlist-1.6.2.tar.gz

New:
----
  frozenlist-1.7.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-frozenlist.spec ++++++
--- /var/tmp/diff_new_pack.vOoTan/_old  2025-09-26 22:24:52.918919549 +0200
+++ /var/tmp/diff_new_pack.vOoTan/_new  2025-09-26 22:24:52.918919549 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-frozenlist
-Version:        1.6.2
+Version:        1.7.0
 Release:        0
 Summary:        Python list-like structure which implements MutableSequence
 License:        Apache-2.0

++++++ frozenlist-1.6.2.tar.gz -> frozenlist-1.7.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/CHANGES.rst 
new/frozenlist-1.7.0/CHANGES.rst
--- old/frozenlist-1.6.2/CHANGES.rst    2025-06-03 22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/CHANGES.rst    2025-06-10 00:33:44.000000000 +0200
@@ -14,6 +14,43 @@
 
 .. towncrier release notes start
 
+v1.7.0
+======
+
+*(2025-06-09)*
+
+
+Features
+--------
+
+- Added deepcopy support to FrozenList -- by :user:`bdraco`.
+
+  *Related issues and pull requests on GitHub:*
+  :issue:`659`.
+
+
+Packaging updates and notes for downstreams
+-------------------------------------------
+
+- Fixed an issue where ``frozenlist`` binary wheels would be built with 
debugging symbols and line tracing enabled, which significantly impacted 
performance. Line tracing is now disabled by default and can only be enabled 
explicitly -- by :user:`bdraco`.
+
+  This change ensures that production builds are optimized for performance. 
Developers who need line tracing for debugging purposes can still enable it by:
+
+  1. Setting the ``FROZENLIST_CYTHON_TRACING`` environment variable
+  2. Using the ``--config-setting=with-cython-tracing=true`` option with pip
+
+  *Related issues and pull requests on GitHub:*
+  :issue:`660`.
+
+- Enabled ``PIP_CONSTRAINT`` environment variable in the build configuration 
to ensure the pinned Cython version from ``requirements/cython.txt`` is used 
during wheel builds.
+
+  *Related issues and pull requests on GitHub:*
+  :issue:`661`.
+
+
+----
+
+
 v1.6.2
 ======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/PKG-INFO 
new/frozenlist-1.7.0/PKG-INFO
--- old/frozenlist-1.6.2/PKG-INFO       2025-06-03 22:04:47.825840500 +0200
+++ new/frozenlist-1.7.0/PKG-INFO       2025-06-10 00:33:52.651409000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: frozenlist
-Version: 1.6.2
+Version: 1.7.0
 Summary: A list-like structure which implements collections.abc.MutableSequence
 Home-page: https://github.com/aio-libs/frozenlist
 Maintainer: aiohttp team <[email protected]>
@@ -161,6 +161,43 @@
 
 .. towncrier release notes start
 
+v1.7.0
+======
+
+*(2025-06-09)*
+
+
+Features
+--------
+
+- Added deepcopy support to FrozenList -- by `@bdraco 
<https://github.com/sponsors/bdraco>`__.
+
+  *Related issues and pull requests on GitHub:*
+  `#659 <https://github.com/aio-libs/frozenlist/issues/659>`__.
+
+
+Packaging updates and notes for downstreams
+-------------------------------------------
+
+- Fixed an issue where ``frozenlist`` binary wheels would be built with 
debugging symbols and line tracing enabled, which significantly impacted 
performance. Line tracing is now disabled by default and can only be enabled 
explicitly -- by `@bdraco <https://github.com/sponsors/bdraco>`__.
+
+  This change ensures that production builds are optimized for performance. 
Developers who need line tracing for debugging purposes can still enable it by:
+
+  1. Setting the ``FROZENLIST_CYTHON_TRACING`` environment variable
+  2. Using the ``--config-setting=with-cython-tracing=true`` option with pip
+
+  *Related issues and pull requests on GitHub:*
+  `#660 <https://github.com/aio-libs/frozenlist/issues/660>`__.
+
+- Enabled ``PIP_CONSTRAINT`` environment variable in the build configuration 
to ensure the pinned Cython version from ``requirements/cython.txt`` is used 
during wheel builds.
+
+  *Related issues and pull requests on GitHub:*
+  `#661 <https://github.com/aio-libs/frozenlist/issues/661>`__.
+
+
+----
+
+
 v1.6.2
 ======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/docs/spelling_wordlist.txt 
new/frozenlist-1.7.0/docs/spelling_wordlist.txt
--- old/frozenlist-1.6.2/docs/spelling_wordlist.txt     2025-06-03 
22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/docs/spelling_wordlist.txt     2025-06-10 
00:33:44.000000000 +0200
@@ -79,6 +79,7 @@
 Cythonize
 de
 deduplicate
+deepcopy
 # de-facto:
 deprecations
 DER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/frozenlist/__init__.py 
new/frozenlist-1.7.0/frozenlist/__init__.py
--- old/frozenlist-1.6.2/frozenlist/__init__.py 2025-06-03 22:04:42.000000000 
+0200
+++ new/frozenlist-1.7.0/frozenlist/__init__.py 2025-06-10 00:33:44.000000000 
+0200
@@ -3,7 +3,7 @@
 from collections.abc import MutableSequence
 from functools import total_ordering
 
-__version__ = "1.6.2"
+__version__ = "1.7.0"
 
 __all__ = ("FrozenList", "PyFrozenList")  # type: Tuple[str, ...]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/frozenlist/_frozenlist.pyx 
new/frozenlist-1.7.0/frozenlist/_frozenlist.pyx
--- old/frozenlist-1.6.2/frozenlist/_frozenlist.pyx     2025-06-03 
22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/frozenlist/_frozenlist.pyx     2025-06-10 
00:33:44.000000000 +0200
@@ -4,6 +4,7 @@
 from cpython.bool cimport PyBool_FromLong
 from libcpp.atomic cimport atomic
 
+import copy
 import types
 from collections.abc import MutableSequence
 
@@ -122,5 +123,26 @@
         else:
             raise RuntimeError("Cannot hash unfrozen list.")
 
+    def __deepcopy__(self, memo):
+        cdef FrozenList new_list
+        obj_id = id(self)
+
+        # Return existing copy if already processed (circular reference)
+        if obj_id in memo:
+            return memo[obj_id]
+
+        # Create new instance and register immediately
+        new_list = self.__class__([])
+        memo[obj_id] = new_list
+
+        # Deep copy items
+        new_list._items[:] = [copy.deepcopy(item, memo) for item in 
self._items]
+
+        # Preserve frozen state
+        if self._frozen.load():
+            new_list.freeze()
+
+        return new_list
+
 
 MutableSequence.register(FrozenList)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/frozenlist.egg-info/PKG-INFO 
new/frozenlist-1.7.0/frozenlist.egg-info/PKG-INFO
--- old/frozenlist-1.6.2/frozenlist.egg-info/PKG-INFO   2025-06-03 
22:04:47.000000000 +0200
+++ new/frozenlist-1.7.0/frozenlist.egg-info/PKG-INFO   2025-06-10 
00:33:52.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: frozenlist
-Version: 1.6.2
+Version: 1.7.0
 Summary: A list-like structure which implements collections.abc.MutableSequence
 Home-page: https://github.com/aio-libs/frozenlist
 Maintainer: aiohttp team <[email protected]>
@@ -161,6 +161,43 @@
 
 .. towncrier release notes start
 
+v1.7.0
+======
+
+*(2025-06-09)*
+
+
+Features
+--------
+
+- Added deepcopy support to FrozenList -- by `@bdraco 
<https://github.com/sponsors/bdraco>`__.
+
+  *Related issues and pull requests on GitHub:*
+  `#659 <https://github.com/aio-libs/frozenlist/issues/659>`__.
+
+
+Packaging updates and notes for downstreams
+-------------------------------------------
+
+- Fixed an issue where ``frozenlist`` binary wheels would be built with 
debugging symbols and line tracing enabled, which significantly impacted 
performance. Line tracing is now disabled by default and can only be enabled 
explicitly -- by `@bdraco <https://github.com/sponsors/bdraco>`__.
+
+  This change ensures that production builds are optimized for performance. 
Developers who need line tracing for debugging purposes can still enable it by:
+
+  1. Setting the ``FROZENLIST_CYTHON_TRACING`` environment variable
+  2. Using the ``--config-setting=with-cython-tracing=true`` option with pip
+
+  *Related issues and pull requests on GitHub:*
+  `#660 <https://github.com/aio-libs/frozenlist/issues/660>`__.
+
+- Enabled ``PIP_CONSTRAINT`` environment variable in the build configuration 
to ensure the pinned Cython version from ``requirements/cython.txt`` is used 
during wheel builds.
+
+  *Related issues and pull requests on GitHub:*
+  `#661 <https://github.com/aio-libs/frozenlist/issues/661>`__.
+
+
+----
+
+
 v1.6.2
 ======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/frozenlist-1.6.2/packaging/pep517_backend/_backend.py 
new/frozenlist-1.7.0/packaging/pep517_backend/_backend.py
--- old/frozenlist-1.6.2/packaging/pep517_backend/_backend.py   2025-06-03 
22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/packaging/pep517_backend/_backend.py   2025-06-10 
00:33:44.000000000 +0200
@@ -291,7 +291,7 @@
     with build_dir_ctx:
         config = _get_local_cython_config()
 
-        cythonize_args = _make_cythonize_cli_args_from_config(config)
+        cythonize_args = _make_cythonize_cli_args_from_config(config, 
cython_line_tracing_requested)
         with _patched_cython_env(config['env'], cython_line_tracing_requested):
             _cythonize_cli_cmd(cythonize_args)
         with patched_distutils_cmd_install():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/frozenlist-1.6.2/packaging/pep517_backend/_cython_configuration.py 
new/frozenlist-1.7.0/packaging/pep517_backend/_cython_configuration.py
--- old/frozenlist-1.6.2/packaging/pep517_backend/_cython_configuration.py      
2025-06-03 22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/packaging/pep517_backend/_cython_configuration.py      
2025-06-10 00:33:44.000000000 +0200
@@ -17,10 +17,20 @@
 class Config(TypedDict):
     env: dict[str, str]
     flags: dict[str, bool]
-    kwargs: dict[str, str]
+    kwargs: dict[str, str | dict[str, str]]
     src: list[str]
 
 
+def _configure_cython_line_tracing(config_kwargs: dict[str, str | dict[str, 
str]], cython_line_tracing_requested: bool) -> None:
+    """Configure Cython line tracing directives if requested."""
+    # If line tracing is requested, add it to the directives
+    if cython_line_tracing_requested:
+        directives = config_kwargs.setdefault('directive', {})
+        assert isinstance(directives, dict)  # Type narrowing for mypy
+        directives['linetrace'] = 'True'
+        directives['profile'] = 'True'
+
+
 def get_local_cython_config() -> Config:
     """Grab optional build dependencies from pyproject.toml config.
 
@@ -78,11 +88,15 @@
     return config_mapping['tool']['local']['cythonize']  # type: 
ignore[no-any-return]
 
 
-def make_cythonize_cli_args_from_config(config: Config) -> list[str]:
+def make_cythonize_cli_args_from_config(config: Config, 
cython_line_tracing_requested: bool = False) -> list[str]:
     py_ver_arg = f'-{_python_version_tuple.major!s}'
 
     cli_flags = get_enabled_cli_flags_from_config(config['flags'])
-    cli_kwargs = get_cli_kwargs_from_config(config['kwargs'])
+
+    config_kwargs = config['kwargs']
+    _configure_cython_line_tracing(config_kwargs, 
cython_line_tracing_requested)
+
+    cli_kwargs = get_cli_kwargs_from_config(config_kwargs)
 
     return cli_flags + [py_ver_arg] + cli_kwargs + ['--'] + config['src']
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/frozenlist-1.6.2/packaging/pep517_backend/_transformers.py 
new/frozenlist-1.7.0/packaging/pep517_backend/_transformers.py
--- old/frozenlist-1.6.2/packaging/pep517_backend/_transformers.py      
2025-06-03 22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/packaging/pep517_backend/_transformers.py      
2025-06-10 00:33:44.000000000 +0200
@@ -16,7 +16,9 @@
     yield from ("=".join(map(str, (flag_opt,) + pair)) for pair in sub_pairs)
 
 
-def get_cli_kwargs_from_config(kwargs_map: Mapping[str, str]) -> List[str]:
+def get_cli_kwargs_from_config(
+    kwargs_map: Mapping[str, Union[str, Dict[str, str]]],
+) -> List[str]:
     """Make a list of options with values from config."""
     return list(chain.from_iterable(map(_emit_opt_pairs, kwargs_map.items())))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/pyproject.toml 
new/frozenlist-1.7.0/pyproject.toml
--- old/frozenlist-1.6.2/pyproject.toml 2025-06-03 22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/pyproject.toml 2025-06-10 00:33:44.000000000 +0200
@@ -48,7 +48,6 @@
 # 
https://cython.rtfd.io/en/latest/src/userguide/source_files_and_compilation.html#compiler-directives
 embedsignature = "True"
 emit_code_comments = "True"
-linetrace = "True"  # Implies `profile=True`
 
 [tool.local.cythonize.kwargs.compile-time-env]
 # This section can contain compile time env vars
@@ -84,7 +83,7 @@
 COLOR = "yes"
 FORCE_COLOR = "1"
 MYPY_FORCE_COLOR = "1"
-# PIP_CONSTRAINT = "requirements/cython.txt"
+PIP_CONSTRAINT = "requirements/cython.txt"
 PRE_COMMIT_COLOR = "always"
 PY_COLORS = "1"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/frozenlist-1.6.2/tests/test_frozenlist.py 
new/frozenlist-1.7.0/tests/test_frozenlist.py
--- old/frozenlist-1.6.2/tests/test_frozenlist.py       2025-06-03 
22:04:42.000000000 +0200
+++ new/frozenlist-1.7.0/tests/test_frozenlist.py       2025-06-10 
00:33:44.000000000 +0200
@@ -2,6 +2,7 @@
 # mypy: disable-error-code="misc"
 
 from collections.abc import MutableSequence
+from copy import deepcopy
 
 import pytest
 
@@ -248,6 +249,129 @@
         _list = self.FrozenList([1, 2])
         assert _list.count(1) == 1
 
+    def test_deepcopy_unfrozen(self) -> None:
+        orig = self.FrozenList([1, 2, 3])
+        copied = deepcopy(orig)
+        assert copied == orig
+        assert copied is not orig
+        assert list(copied) == list(orig)
+        assert not copied.frozen
+        # Verify the copy is mutable
+        copied.append(4)
+        assert len(copied) == 4
+        assert len(orig) == 3
+
+    def test_deepcopy_frozen(self) -> None:
+        orig = self.FrozenList([1, 2, 3])
+        orig.freeze()
+        copied = deepcopy(orig)
+        assert copied == orig
+        assert copied is not orig
+        assert list(copied) == list(orig)
+        assert copied.frozen
+        # Verify the copy is also frozen
+        with pytest.raises(RuntimeError):
+            copied.append(4)
+
+    def test_deepcopy_nested(self) -> None:
+        inner = self.FrozenList([1, 2])
+        orig = self.FrozenList([inner, 3])
+        copied = deepcopy(orig)
+        assert copied == orig
+        assert copied[0] is not orig[0]
+        assert isinstance(copied[0], self.FrozenList)
+        # Modify the inner list in the copy
+        copied[0].append(3)
+        assert len(copied[0]) == 3
+        assert len(orig[0]) == 2
+
+    def test_deepcopy_circular(self) -> None:
+        orig = self.FrozenList([1, 2])
+        orig.append(orig)  # Create circular reference
+
+        copied = deepcopy(orig)
+
+        # Check structure is preserved
+        assert len(copied) == 3
+        assert copied[0] == 1
+        assert copied[1] == 2
+        assert copied[2] is copied  # Circular reference preserved
+
+        # Verify they are different objects
+        assert copied is not orig
+        assert copied[2] is not orig
+
+        # Modify the copy
+        copied.append(3)
+        assert len(copied) == 4
+        assert len(orig) == 3
+
+    def test_deepcopy_circular_frozen(self) -> None:
+        orig = self.FrozenList([1, 2])
+        orig.append(orig)  # Create circular reference
+        orig.freeze()
+
+        copied = deepcopy(orig)
+
+        # Check structure is preserved
+        assert len(copied) == 3
+        assert copied[0] == 1
+        assert copied[1] == 2
+        assert copied[2] is copied  # Circular reference preserved
+        assert copied.frozen
+
+        # Verify frozen state
+        with pytest.raises(RuntimeError):
+            copied.append(3)
+
+    def test_deepcopy_nested_circular(self) -> None:
+        # Create a complex nested structure with circular references
+        inner1 = self.FrozenList([1, 2])
+        inner2 = self.FrozenList([3, 4])
+        orig = self.FrozenList([inner1, inner2])
+
+        # Add circular references
+        inner1.append(inner2)  # inner1 -> inner2
+        inner2.append(orig)  # inner2 -> orig (outer list)
+        orig.append(orig)  # orig -> orig (self reference)
+
+        copied = deepcopy(orig)
+
+        # Verify structure
+        assert len(copied) == 3
+        assert isinstance(copied[0], self.FrozenList)
+        assert isinstance(copied[1], self.FrozenList)
+        assert copied[2] is copied  # Self reference preserved
+
+        # Verify nested circular references
+        assert len(copied[0]) == 3
+        assert copied[0][2] is copied[1]  # inner1 -> inner2 preserved
+        assert len(copied[1]) == 3
+        assert copied[1][2] is copied  # inner2 -> orig preserved
+
+        # All objects should be new instances
+        assert copied is not orig
+        assert copied[0] is not orig[0]
+        assert copied[1] is not orig[1]
+
+    def test_deepcopy_multiple_references(self) -> None:
+        # Test that multiple references to the same object are preserved
+        shared = self.FrozenList([1, 2])
+        orig = self.FrozenList([shared, shared, 3])
+
+        copied = deepcopy(orig)
+
+        # Both references should point to the same copied object
+        assert copied[0] is copied[1]
+        assert copied[0] is not shared
+        assert isinstance(copied[0], self.FrozenList)
+
+        # Modify through one reference
+        copied[0].append(3)
+        assert len(copied[0]) == 3
+        assert len(copied[1]) == 3  # Should see the change
+        assert len(shared) == 2  # Original unchanged
+
 
 class TestFrozenList(FrozenListMixin):
     FrozenList = FrozenList  # type: ignore[assignment]  # FIXME

Reply via email to