Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pycairo for openSUSE:Factory 
checked in at 2026-08-11 17:09:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pycairo (Old)
 and      /work/SRC/openSUSE:Factory/.python-pycairo.new.17972 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pycairo"

Tue Aug 11 17:09:40 2026 rev:18 rq:1370482 version:1.29.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pycairo/python-pycairo.changes    
2026-01-27 16:06:55.300521323 +0100
+++ /work/SRC/openSUSE:Factory/.python-pycairo.new.17972/python-pycairo.changes 
2026-08-11 17:09:59.919903608 +0200
@@ -1,0 +2,10 @@
+Sat Aug  8 07:30:27 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to 1.29.1:
+  * Update dependencies (libpng, zlib) for the Windows wheels
+  * Fix documentation build with Python 3.15
+  * Build wheels for Python 3.15 (except for 32bit Windows)
+  * Fix a memory leak in ScaledFont.text_to_glyphs()
+  * Fix some minor reference leaks
+
+-------------------------------------------------------------------

Old:
----
  pycairo-1.29.0.tar.gz

New:
----
  pycairo-1.29.1.tar.gz

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

Other differences:
------------------
++++++ python-pycairo.spec ++++++
--- /var/tmp/diff_new_pack.4JFcbq/_old  2026-08-11 17:10:00.539929887 +0200
+++ /var/tmp/diff_new_pack.4JFcbq/_new  2026-08-11 17:10:00.543930057 +0200
@@ -19,7 +19,7 @@
 %{?sle15_python_module_pythons}
 %define         oldpython python
 Name:           python-pycairo
-Version:        1.29.0
+Version:        1.29.1
 Release:        0
 Summary:        Python Bindings for Cairo
 License:        LGPL-2.1-or-later OR MPL-1.1

++++++ pycairo-1.29.0.tar.gz -> pycairo-1.29.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/.ci/download-cairo-win32.py 
new/pycairo-1.29.1/.ci/download-cairo-win32.py
--- old/pycairo-1.29.0/.ci/download-cairo-win32.py      2025-11-11 
20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/.ci/download-cairo-win32.py      2026-08-07 
10:24:04.000000000 +0200
@@ -10,7 +10,7 @@
 from pathlib import Path
 from urllib.request import urlretrieve as download
 
-CAIRO_VERSION = "1.18.4-v2"
+CAIRO_VERSION = "1.18.4-v3"
 
 
 def get_platform() -> str:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/.github/workflows/test.yml 
new/pycairo-1.29.1/.github/workflows/test.yml
--- old/pycairo-1.29.0/.github/workflows/test.yml       2025-11-11 
20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/.github/workflows/test.yml       2026-08-07 
10:24:04.000000000 +0200
@@ -1,224 +1,245 @@
-name: Test
-
-on: 
-  push:
-  pull_request:
-
-jobs:
-
-  msys2:
-    runs-on: windows-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        include:
-          - msystem: MINGW64
-            pkgprefix: mingw-w64-x86_64
-          - msystem: CLANG64
-            pkgprefix: mingw-w64-clang-x86_64
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v5
-
-      - name: setup-msys2
-        uses: msys2/setup-msys2@v2
-        with:
-          msystem: ${{ matrix.msystem }}
-          update: true
-          install: >-
-            ${{ matrix.pkgprefix }}-cairo
-            ${{ matrix.pkgprefix }}-python
-            ${{ matrix.pkgprefix }}-python-pip
-            ${{ matrix.pkgprefix }}-python-poetry
-            ${{ matrix.pkgprefix }}-cc
-            ${{ matrix.pkgprefix }}-meson
-            ${{ matrix.pkgprefix }}-ninja
-            ${{ matrix.pkgprefix }}-pkgconf
-
-      - name: Install dependencies
-        shell: msys2 {0}
-        run: |
-          # XXX: set CC for setuptools so it finds clang
-          export CC=cc
-          poetry install
-
-      - name: Build & Test with meson
-        shell: msys2 {0}
-        run: |
-          # XXX: pass python, so global python3 doesn't win
-          poetry run meson setup -Dpython=python --werror _build
-          poetry run meson compile -C _build
-          poetry run meson test -v -C _build
-          rm -Rf _build
-
-      - name: Build & Test with poetry
-        shell: msys2 {0}
-        run: |
-          export CFLAGS="-Werror -coverage"
-          export PYTHONDEVMODE=1
-          poetry run pip install --no-build-isolation -e .
-          poetry run coverage run --branch -m pytest
-          poetry run coverage xml -i
-
-      - name: Upload coverage to Codecov
-        uses: codecov/codecov-action@v5
-
-  ubuntu:
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 
'pypy-3.11']
-    steps:
-    - uses: actions/checkout@v5
-
-    - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v6
-      with:
-        python-version: ${{ matrix.python-version }}
-        allow-prereleases: true
-
-    - name: Install dependencies
-      run: |
-        sudo apt-get update -q
-        sudo apt-get install -y libcairo2-dev ninja-build
-        pipx install uv
-        pipx install meson
-        uv sync
-
-    - name: Install optional test dependencies
-      if: ${{ !contains(matrix.python-version, 'pypy') && 
!contains(matrix.python-version, '3.14') }}
-      run: |
-        uv sync --group test-extras
-
-    - name: Build & Test with meson
-      run: |
-        uv run meson setup --werror _build
-        uv run meson compile -C _build
-        uv run meson test -v -C _build
-        rm -Rf _build
-
-    - name: Build & Test with uv
-      run: |
-        export CFLAGS="-Werror -coverage"
-        export PYTHONDEVMODE=1
-        uv pip install --no-build-isolation -e .
-        uv run coverage run --branch -m pytest
-        uv run coverage xml -i
-
-    - name: Upload coverage to Codecov
-      uses: codecov/codecov-action@v5
-
-    - name: Run linters
-      if: ${{ !contains(matrix.python-version, 'pypy') }}
-      run: |
-        uv run flake8
-        uv run mypy .
-
-    - name: Build docs
-      if: ${{ !contains(matrix.python-version, 'pypy') }}
-      run: |
-        uv sync --group docs
-        uv run python -m sphinx -W -a -E -b html -n docs docs/_build
-
-  msvc:
-    runs-on: ${{ matrix.os }}
-    strategy:
-      fail-fast: false
-      matrix:
-        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 
'pypy-3.11']
-        architecture: ['x64']
-        os: ['windows-2022']
-        include:
-          - python-version: '3.10'
-            architecture: 'x86'
-            os: 'windows-2022'
-          - python-version: '3.14'
-            architecture: 'x86'
-            os: 'windows-2022'
-          - python-version: '3.14'
-            architecture: 'arm64'
-            os: 'windows-11-arm'
-    steps:
-      - uses: actions/checkout@v5
-
-      - name: Set up Python ${{ matrix.python-version }}
-        id: setup-python
-        uses: actions/setup-python@v6
-        with:
-          python-version: ${{ matrix.python-version }}
-          architecture: ${{ matrix.architecture }}
-          allow-prereleases: true
-
-      - name: Setup MSVC
-        uses: ilammy/[email protected]
-        with:
-          arch : ${{ matrix.architecture }}
-
-      - name: Download and extract Cairo Binary
-        run: |
-          python .ci/download-cairo-win32.py "${{ matrix.architecture }}"
-
-      - name: Install dependencies
-        run: |
-          pipx install --python "${{ steps.setup-python.outputs.python-path 
}}" uv
-          pipx install --python "${{ steps.setup-python.outputs.python-path 
}}" meson
-          uv sync
-
-      - name: Build & Test with meson
-        env:
-          PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe
-          PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig
-          CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1"
-        run: |
-          # XXX: pass python, so global python3 doesn't win
-          uv run meson setup -Dpython=python --werror _build
-          uv run meson compile -C _build
-          uv run meson test -v -C _build
-          if (-not $?) { exit 1 }
-          rm -r _build
-
-      - name: Build & Test with uv
-        env:
-          PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe
-          PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig
-          CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1"
-          PYTHONDEVMODE: 1
-        run: |
-          uv pip install --no-build-isolation -e .
-          uv run coverage run --branch -m pytest
-          if (-not $?) { exit 1 }
-          uv run coverage xml -i
-
-      - name: Upload coverage to Codecov
-        uses: codecov/codecov-action@v5
-
-  macos:
-    runs-on: macos-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v5
-
-      - name: Install dependencies
-        run: |
-          brew install pkg-config cairo python meson ninja uv
-          uv sync
-
-      - name: Build & Test with meson
-        run: |
-          uv run meson setup --werror _build
-          uv run meson compile -C _build
-          uv run meson test -v -C _build
-          rm -Rf _build
-
-      - name: Build & Test with uv
-        run: |
-          export CFLAGS="-Werror -coverage"
-          export PYTHONDEVMODE=1
-          uv pip install --no-build-isolation -e .
-          uv run coverage run --branch -m pytest
-          uv run coverage xml -i
-
-      - name: Upload coverage to Codecov
-        uses: codecov/codecov-action@v5
+name: Test
+
+on: 
+  push:
+  pull_request:
+
+permissions: {}
+
+jobs:
+
+  msys2:
+    runs-on: windows-latest
+    permissions:
+      contents: read
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - msystem: MINGW64
+            pkgprefix: mingw-w64-x86_64
+          - msystem: CLANG64
+            pkgprefix: mingw-w64-clang-x86_64
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
+        with:
+          persist-credentials: false
+
+      - name: setup-msys2
+        uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # 
v2.32.0
+        with:
+          msystem: ${{ matrix.msystem }}
+          update: true
+          install: >-
+            ${{ matrix.pkgprefix }}-cairo
+            ${{ matrix.pkgprefix }}-python
+            ${{ matrix.pkgprefix }}-python-pip
+            ${{ matrix.pkgprefix }}-python-poetry
+            ${{ matrix.pkgprefix }}-cc
+            ${{ matrix.pkgprefix }}-meson
+            ${{ matrix.pkgprefix }}-ninja
+            ${{ matrix.pkgprefix }}-pkgconf
+
+      - name: Install dependencies
+        shell: msys2 {0}
+        run: |
+          # XXX: set CC for setuptools so it finds clang
+          export CC=cc
+          poetry install
+
+      - name: Build & Test with meson
+        shell: msys2 {0}
+        run: |
+          # XXX: pass python, so global python3 doesn't win
+          poetry run meson setup -Dpython=python --werror _build
+          poetry run meson compile -C _build
+          poetry run meson test -v -C _build
+          rm -Rf _build
+
+      - name: Build & Test with poetry
+        shell: msys2 {0}
+        run: |
+          export CFLAGS="-Werror -coverage"
+          export PYTHONDEVMODE=1
+          poetry run pip install --no-build-isolation -e .
+          poetry run coverage run --branch -m pytest
+          poetry run coverage xml -i
+
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f 
# v7.0.0
+
+  ubuntu:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 
'3.15', '3.15t', 'pypy-3.11']
+    steps:
+    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+      with:
+        persist-credentials: false
+
+    - name: Set up Python ${{ matrix.python-version }}
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+      with:
+        python-version: ${{ matrix.python-version }}
+        allow-prereleases: true
+
+    - name: Install dependencies
+      run: |
+        sudo apt-get update -q
+        sudo apt-get install -y libcairo2-dev ninja-build
+        pipx install uv
+        pipx install meson
+        uv sync
+
+    - name: Install optional test dependencies
+      if: ${{ !contains(matrix.python-version, 'pypy') && 
!contains(matrix.python-version, '3.14') && !contains(matrix.python-version, 
'3.15') }}
+      run: |
+        uv sync --group test-extras
+
+    - name: Build & Test with meson
+      run: |
+        uv run meson setup --werror _build
+        uv run meson compile -C _build
+        uv run meson test -v -C _build
+        rm -Rf _build
+
+    - name: Build & Test with uv
+      run: |
+        export CFLAGS="-Werror -coverage"
+        export PYTHONDEVMODE=1
+        uv pip install --no-build-isolation -e .
+        uv run coverage run --branch -m pytest
+        uv run coverage xml -i
+
+    - name: Upload coverage to Codecov
+      uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # 
v7.0.0
+
+    - name: Run linters
+      if: ${{ !contains(matrix.python-version, 'pypy') }}
+      run: |
+        uv run flake8
+        uv run mypy .
+
+    - name: Build docs
+      if: ${{ !contains(matrix.python-version, 'pypy') }}
+      run: |
+        uv sync --group docs
+        uv run python -m sphinx -W -a -E -b html -n docs docs/_build
+
+  msvc:
+    runs-on: ${{ matrix.os }}
+    permissions:
+      contents: read
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 
'3.15', '3.15t', 'pypy-3.11']
+        architecture: ['x64']
+        os: ['windows-2022']
+        include:
+          - python-version: '3.10'
+            architecture: 'x86'
+            os: 'windows-2022'
+          - python-version: '3.14'
+            architecture: 'x86'
+            os: 'windows-2022'
+          - python-version: '3.15'
+            architecture: 'arm64'
+            os: 'windows-11-arm'
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
+        with:
+          persist-credentials: false
+
+      - name: Set up Python ${{ matrix.python-version }}
+        id: setup-python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+        with:
+          python-version: ${{ matrix.python-version }}
+          architecture: ${{ matrix.architecture }}
+          allow-prereleases: true
+
+      - name: Setup MSVC
+        uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # 
v1.13.0
+        with:
+          arch : ${{ matrix.architecture }}
+
+      - name: Download and extract Cairo Binary
+        env:
+          PYCAIRO_ARCH: ${{ matrix.architecture }}
+        run: |
+          python .ci/download-cairo-win32.py "$env:PYCAIRO_ARCH"
+
+      - name: Install dependencies
+        env:
+          PYTHON_PATH: ${{ steps.setup-python.outputs.python-path }}
+        run: |
+          pipx install --python "$env:PYTHON_PATH" uv
+          pipx install --python "$env:PYTHON_PATH" meson
+          uv sync
+
+      - name: Build & Test with meson
+        env:
+          PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe
+          PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig
+          CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1"
+        run: |
+          # XXX: pass python, so global python3 doesn't win
+          uv run meson setup -Dpython=python --werror _build
+          uv run meson compile -C _build
+          uv run meson test -v -C _build
+          if (-not $?) { exit 1 }
+          rm -r _build
+
+      - name: Build & Test with uv
+        env:
+          PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe
+          PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig
+          CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1"
+          PYTHONDEVMODE: 1
+        run: |
+          uv pip install --no-build-isolation -e .
+          uv run coverage run --branch -m pytest
+          if (-not $?) { exit 1 }
+          uv run coverage xml -i
+
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f 
# v7.0.0
+
+  macos:
+    runs-on: macos-latest
+    permissions:
+      contents: read
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
+        with:
+          persist-credentials: false
+
+      - name: Install dependencies
+        run: |
+          brew install pkg-config cairo python meson ninja uv
+          uv sync
+
+      - name: Build & Test with meson
+        run: |
+          uv run meson setup --werror _build
+          uv run meson compile -C _build
+          uv run meson test -v -C _build
+          rm -Rf _build
+
+      - name: Build & Test with uv
+        run: |
+          export CFLAGS="-Werror -coverage"
+          export PYTHONDEVMODE=1
+          uv pip install --no-build-isolation -e .
+          uv run coverage run --branch -m pytest
+          uv run coverage xml -i
+
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f 
# v7.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/.github/workflows/wheels.yml 
new/pycairo-1.29.1/.github/workflows/wheels.yml
--- old/pycairo-1.29.0/.github/workflows/wheels.yml     2025-11-11 
20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/.github/workflows/wheels.yml     2026-08-07 
10:24:04.000000000 +0200
@@ -2,16 +2,23 @@
 
 on: [push, pull_request]
 
+permissions: {}
+
 jobs:
 
   build_sdist:
     runs-on: ubuntu-latest
 
+    permissions:
+      contents: read
+
     steps:
-      - uses: actions/checkout@v5
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
+        with:
+          persist-credentials: false
 
       - name: Set up Python
-        uses: actions/setup-python@v6
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: '3.11'
 
@@ -24,7 +31,7 @@
       - name: Build sdist
         run: python -m build --sdist
 
-      - uses: actions/upload-artifact@v5
+      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: sdist
           path: ./dist/*.tar.gz
@@ -32,6 +39,8 @@
   build_wheels:
     name: Build wheels on ${{ matrix.os }} (${{ matrix.platform_id }})
     runs-on: ${{ matrix.os }}
+    permissions:
+      contents: read
     strategy:
       fail-fast: false
       matrix:
@@ -47,25 +56,27 @@
             arch: arm64
 
     steps:
-      - uses: actions/checkout@v5
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
+        with:
+          persist-credentials: false
 
       - name: Setup MSVC
-        uses: ilammy/[email protected]
+        uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # 
v1.13.0
         with:
           arch : ${{ matrix.arch }}
 
       - name: Build wheels
-        uses: pypa/[email protected]
+        uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # 
v4.2.0
         env:
           CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1"
           CIBW_BEFORE_BUILD: "python {package}/.ci/download-cairo-win32.py ${{ 
matrix.arch }}"
-          CIBW_BUILD: cp310-${{ matrix.platform_id }} cp311-${{ 
matrix.platform_id }} cp312-${{ matrix.platform_id }} cp313-${{ 
matrix.platform_id }} cp314-${{ matrix.platform_id }} cp314t-${{ 
matrix.platform_id }}
-          CIBW_SKIP: cp314t-win32
+          CIBW_BUILD: cp310-${{ matrix.platform_id }} cp311-${{ 
matrix.platform_id }} cp312-${{ matrix.platform_id }} cp313-${{ 
matrix.platform_id }} cp314-${{ matrix.platform_id }} cp314t-${{ 
matrix.platform_id }} cp315-${{ matrix.platform_id }} cp315t-${{ 
matrix.platform_id }}
+          CIBW_SKIP: cp314t-win32 cp315-win32 cp315t-win32
           CIBW_TEST_REQUIRES: pytest==8.3.5
           CIBW_TEST_COMMAND: bash {package}/.ci/test-wheels.sh {package}
           CIBW_ENVIRONMENT_WINDOWS: PKG_CONFIG_PATH='${{ github.workspace 
}}/cairo-prebuild/lib/pkgconfig' PKG_CONFIG='${{ github.workspace 
}}/cairo-prebuild/bin/pkgconf.exe'
 
-      - uses: actions/upload-artifact@v5
+      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: "wheel-${{ matrix.arch }}"
           path: ./wheelhouse/*.whl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/NEWS new/pycairo-1.29.1/NEWS
--- old/pycairo-1.29.0/NEWS     2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/NEWS     2026-08-07 10:24:04.000000000 +0200
@@ -1,5 +1,16 @@
 Since version 1.11.0 Pycairo uses `Semantic Versioning <http://semver.org/>`__
 
+.. _v1.29.1:
+
+1.29.1 - 2026-08-07
+-------------------
+
+* Update dependencies (libpng, zlib) for the Windows wheels :pr:`442`
+* Fix documentation build with Python 3.15 :pr:`441`
+* Build wheels for Python 3.15 (except for 32bit Windows) :pr:`444`
+* Fix a memory leak in :meth:`ScaledFont.text_to_glyphs` :pr:`446`
+* Fix some minor reference leaks :pr:`447`
+
 .. _v1.29.0:
 
 1.29.0 - 2025-11-11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/PKG-INFO new/pycairo-1.29.1/PKG-INFO
--- old/pycairo-1.29.0/PKG-INFO 2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/PKG-INFO 2026-08-07 10:24:04.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pycairo
-Version: 1.29.0
+Version: 1.29.1
 Summary: Python interface for cairo
 Maintainer-Email: Christoph Reiter <[email protected]>
 License: LGPL-2.1-only OR MPL-1.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/cairo/font.c 
new/pycairo-1.29.1/cairo/font.c
--- old/pycairo-1.29.0/cairo/font.c     2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/cairo/font.c     2026-08-07 10:24:04.000000000 +0200
@@ -429,10 +429,9 @@
       goto error;
     pyglyph = PyObject_Call(
       (PyObject *)&PycairoGlyph_Type, glyph_args, NULL);
-    if (pyglyph == NULL) {
-      Py_DECREF (glyph_args);
+    Py_DECREF (glyph_args);
+    if (pyglyph == NULL)
       goto error;
-    }
     PyList_SET_ITEM (glyph_list, i, pyglyph);
   }
   cairo_glyph_free (glyphs);
@@ -450,10 +449,9 @@
         goto error;
       pycluster = PyObject_Call(
         (PyObject *)&PycairoTextCluster_Type, cluster_args, NULL);
-      if (pycluster == NULL) {
-        Py_DECREF (cluster_args);
+      Py_DECREF (cluster_args);
+      if (pycluster == NULL)
         goto error;
-      }
       PyList_SET_ITEM (cluster_list, i, pycluster);
     }
     cairo_text_cluster_free (clusters);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/cairo/pattern.c 
new/pycairo-1.29.1/cairo/pattern.c
--- old/pycairo-1.29.0/cairo/pattern.c  2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/cairo/pattern.c  2026-08-07 10:24:04.000000000 +0200
@@ -1018,6 +1018,7 @@
     result = NULL;
     goto error;
   }
+  Py_DECREF (result);
 
   Py_DECREF (pysurface);
   PyGILState_Release (gstate);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/cairo/surface.c 
new/pycairo-1.29.1/cairo/surface.c
--- old/pycairo-1.29.0/cairo/surface.c  2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/cairo/surface.c  2026-08-07 10:24:04.000000000 +0200
@@ -503,7 +503,7 @@
   mime_intern = PyUnicode_InternFromString (mime_type);
   surface_capsule = PyCapsule_New(o->surface, NULL, NULL);
   view_capsule = PyCapsule_New(view, NULL, NULL);
-  user_data = Py_BuildValue("(NNOO)", surface_capsule, view_capsule, obj, 
mime_intern);
+  user_data = Py_BuildValue("(NNON)", surface_capsule, view_capsule, obj, 
mime_intern);
   if (user_data == NULL) {
     PyBuffer_Release (view);
     PyMem_Free (view);
@@ -558,6 +558,7 @@
   mime_intern = PyUnicode_InternFromString (mime_type);
   user_data = cairo_surface_get_user_data(
     o->surface, (cairo_user_data_key_t *)mime_intern);
+  Py_DECREF(mime_intern);
 
   if (user_data == NULL) {
     /* In case the mime data wasn't set through the Python API just copy it */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/docs/conf.py 
new/pycairo-1.29.1/docs/conf.py
--- old/pycairo-1.29.0/docs/conf.py     2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/docs/conf.py     2026-08-07 10:24:04.000000000 +0200
@@ -1,17 +1,17 @@
+import importlib.machinery
+import importlib.util
 import os
 import sys
 
 
 dir_ = os.path.dirname(os.path.realpath(__file__))
-
-
-def exec_module(path):
-    import importlib.machinery
-    loader = importlib.machinery.SourceFileLoader("cairo", path)
-    return loader.load_module()
-
-
-sys.modules["cairo"] = exec_module(os.path.join(dir_, "..", "cairo", 
"__init__.pyi"))
+loader = importlib.machinery.SourceFileLoader(
+    "cairo", os.path.join(dir_, "..", "cairo", "__init__.pyi")
+)
+spec = importlib.util.spec_from_loader("cairo", loader)
+module = importlib.util.module_from_spec(spec)
+sys.modules["cairo"] = module
+loader.exec_module(module)
 
 extensions = [
     'sphinx.ext.intersphinx',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/meson.build 
new/pycairo-1.29.1/meson.build
--- old/pycairo-1.29.0/meson.build      2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/meson.build      2026-08-07 10:24:04.000000000 +0200
@@ -1,6 +1,6 @@
 project(
   'pycairo', 'c',
-  version: '1.29.0',
+  version: '1.29.1',
   meson_version: '>= 0.64.0',
   license: 'LGPL-2.1-only OR MPL-1.1',
   default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pycairo-1.29.0/pyproject.toml 
new/pycairo-1.29.1/pyproject.toml
--- old/pycairo-1.29.0/pyproject.toml   2025-11-11 20:01:50.000000000 +0100
+++ new/pycairo-1.29.1/pyproject.toml   2026-08-07 10:24:04.000000000 +0200
@@ -1,6 +1,6 @@
 [project]
 name = "pycairo"
-version = "1.29.0"
+version = "1.29.1"
 description = "Python interface for cairo"
 readme = "README.rst"
 requires-python = ">=3.10"

Reply via email to