Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ufoLib2 for openSUSE:Factory checked in at 2026-03-10 17:56:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ufoLib2 (Old) and /work/SRC/openSUSE:Factory/.python-ufoLib2.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ufoLib2" Tue Mar 10 17:56:51 2026 rev:13 rq:1337909 version:0.18.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ufoLib2/python-ufoLib2.changes 2025-04-20 20:08:23.474176772 +0200 +++ /work/SRC/openSUSE:Factory/.python-ufoLib2.new.8177/python-ufoLib2.changes 2026-03-10 18:01:16.071234428 +0100 @@ -1,0 +2,12 @@ +Tue Mar 10 08:25:36 UTC 2026 - Dirk Müller <[email protected]> + +- update to 0.18.1: + * Ignore temporary directory cleanup errors +- update to 0.18.0: + * Housekeeping + * Fix typo in width class label + * Drop support for EOL Python 3.8, update requirements + * don't import fs module, replace tempfs with + tempfile.TemporaryDir + +------------------------------------------------------------------- Old: ---- ufolib2-0.17.1.tar.gz New: ---- ufolib2-0.18.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ufoLib2.spec ++++++ --- /var/tmp/diff_new_pack.Y6wjY6/_old 2026-03-10 18:01:16.859266828 +0100 +++ /var/tmp/diff_new_pack.Y6wjY6/_new 2026-03-10 18:01:16.859266828 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-ufoLib2 # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-ufoLib2 -Version: 0.17.1 +Version: 0.18.1 Release: 0 Summary: UFO font processing library License: Apache-2.0 ++++++ ufolib2-0.17.1.tar.gz -> ufolib2-0.18.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/.github/workflows/ci.yml new/ufolib2-0.18.1/.github/workflows/ci.yml --- old/ufolib2-0.17.1/.github/workflows/ci.yml 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/.github/workflows/ci.yml 2025-07-10 13:40:29.000000000 +0200 @@ -14,7 +14,7 @@ steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.x" - name: Lint @@ -28,7 +28,7 @@ steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.x" - name: Lint @@ -40,13 +40,13 @@ runs-on: ${{ matrix.platform }} strategy: matrix: - python-version: ["3.8", "3.13"] + python-version: ["3.9", "3.13"] platform: [ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install packages @@ -86,7 +86,7 @@ steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install dependencies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/PKG-INFO new/ufolib2-0.18.1/PKG-INFO --- old/ufolib2-0.17.1/PKG-INFO 2025-01-21 13:30:19.916452600 +0100 +++ new/ufolib2-0.18.1/PKG-INFO 2025-07-10 13:40:38.755456700 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: ufoLib2 -Version: 0.17.1 +Version: 0.18.1 Summary: ufoLib2 is a UFO font processing library. Author-email: Adrien Tétar <[email protected]> License: Apache 2.0 @@ -12,21 +12,22 @@ Classifier: Intended Audience :: End Users/Desktop Classifier: Topic :: Text Processing :: Fonts Classifier: License :: OSI Approved :: Apache Software License -Requires-Python: >=3.8 +Requires-Python: >=3.9 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: attrs>=22.1.0 -Requires-Dist: fonttools[ufo]>=4.0.0 +Requires-Dist: fonttools[ufo]>=4.58.0 Provides-Extra: lxml Requires-Dist: lxml; extra == "lxml" Provides-Extra: converters -Requires-Dist: cattrs>=24.1; extra == "converters" +Requires-Dist: cattrs>=25.1.1; extra == "converters" Provides-Extra: json -Requires-Dist: cattrs>=24.1; extra == "json" +Requires-Dist: cattrs>=25.1.1; extra == "json" Requires-Dist: orjson; platform_python_implementation != "PyPy" and extra == "json" Provides-Extra: msgpack -Requires-Dist: cattrs>=24.1; extra == "msgpack" +Requires-Dist: cattrs>=25.1.1; extra == "msgpack" Requires-Dist: msgpack; extra == "msgpack" +Dynamic: license-file # ufoLib2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/pyproject.toml new/ufolib2-0.18.1/pyproject.toml --- old/ufolib2-0.17.1/pyproject.toml 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/pyproject.toml 2025-07-10 13:40:29.000000000 +0200 @@ -17,8 +17,8 @@ "License :: OSI Approved :: Apache Software License", ] urls = { Homepage = "https://github.com/fonttools/ufoLib2" } -requires-python = ">=3.8" -dependencies = ["attrs >= 22.1.0", "fonttools[ufo] >= 4.0.0"] +requires-python = ">=3.9" +dependencies = ["attrs >= 22.1.0", "fonttools[ufo] >= 4.58.0"] dynamic = ["version"] [project.readme] @@ -27,9 +27,9 @@ [project.optional-dependencies] lxml = ["lxml"] -converters = ["cattrs >= 24.1"] -json = ["cattrs >= 24.1", "orjson ; platform_python_implementation != 'PyPy'"] -msgpack = ["cattrs >= 24.1", "msgpack"] +converters = ["cattrs >= 25.1.1"] +json = ["cattrs >= 25.1.1", "orjson ; platform_python_implementation != 'PyPy'"] +msgpack = ["cattrs >= 25.1.1", "msgpack"] [tool.setuptools] package-dir = { "" = "src" } @@ -48,7 +48,7 @@ write_to = "src/ufoLib2/_version.py" [tool.black] -target-version = ["py38"] +target-version = ["py39"] [tool.isort] multi_line_output = 3 @@ -67,7 +67,7 @@ ] [tool.mypy] -python_version = "3.8" +python_version = "3.9" disallow_incomplete_defs = true no_implicit_optional = true strict_optional = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/requirements-dev.txt new/ufolib2-0.18.1/requirements-dev.txt --- old/ufolib2-0.17.1/requirements-dev.txt 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/requirements-dev.txt 2025-07-10 13:40:29.000000000 +0200 @@ -1,52 +1,63 @@ # This file was autogenerated by uv via the following command: -# uv pip compile --python 3.8 requirements-dev.in -black==24.8.0 +# uv pip compile --universal --python 3.9 requirements-dev.in +black==25.1.0 # via -r requirements-dev.in -click==8.1.7 +click==8.1.8 ; python_full_version < '3.10' # via black -coverage==7.6.1 +click==8.2.1 ; python_full_version >= '3.10' + # via black +colorama==0.4.6 ; sys_platform == 'win32' + # via + # click + # pytest +coverage==7.9.2 # via -r requirements-dev.in -exceptiongroup==1.2.2 +exceptiongroup==1.3.0 ; python_full_version < '3.11' # via # -c requirements.txt # pytest -flake8==7.1.1 +flake8==7.3.0 # via -r requirements-dev.in -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -isort==5.13.2 +isort==6.0.1 # via -r requirements-dev.in mccabe==0.7.0 # via flake8 -mypy==1.13.0 +mypy==1.16.1 # via -r requirements-dev.in -mypy-extensions==1.0.0 +mypy-extensions==1.1.0 # via # black # mypy -packaging==24.1 +packaging==25.0 # via # black # pytest pathspec==0.12.1 + # via + # black + # mypy +platformdirs==4.3.8 # via black -platformdirs==4.3.6 - # via black -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -pycodestyle==2.12.1 +pycodestyle==2.14.0 # via flake8 -pyflakes==3.2.0 +pyflakes==3.4.0 # via flake8 -pytest==8.3.3 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via -r requirements-dev.in -tomli==2.0.2 +tomli==2.2.1 ; python_full_version < '3.11' # via # black # mypy # pytest -typing-extensions==4.12.2 +typing-extensions==4.14.1 # via # -c requirements.txt # black + # exceptiongroup # mypy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/requirements.txt new/ufolib2-0.18.1/requirements.txt --- old/ufolib2-0.17.1/requirements.txt 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/requirements.txt 2025-07-10 13:40:29.000000000 +0200 @@ -1,28 +1,30 @@ # This file was autogenerated by uv via the following command: -# uv pip compile --all-extras --python 3.8 pyproject.toml +# uv pip compile --all-extras --universal --python 3.9 pyproject.toml appdirs==1.4.4 # via fs -attrs==24.2.0 +attrs==25.3.0 # via # ufolib2 (pyproject.toml) # cattrs -cattrs==24.1.2 +cattrs==25.1.1 # via ufolib2 (pyproject.toml) -exceptiongroup==1.2.2 +exceptiongroup==1.3.0 ; python_full_version < '3.11' # via cattrs -fonttools==4.54.1 +fonttools==4.58.5 # via ufolib2 (pyproject.toml) fs==2.4.16 # via fonttools -lxml==5.3.0 +lxml==6.0.0 # via ufolib2 (pyproject.toml) -msgpack==1.1.0 +msgpack==1.1.1 # via ufolib2 (pyproject.toml) -orjson==3.10.10 +orjson==3.10.18 ; platform_python_implementation != 'PyPy' # via ufolib2 (pyproject.toml) -setuptools==75.3.0 +setuptools==80.9.0 # via fs -six==1.16.0 +six==1.17.0 # via fs -typing-extensions==4.12.2 - # via cattrs +typing-extensions==4.14.1 + # via + # cattrs + # exceptiongroup diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2/_version.py new/ufolib2-0.18.1/src/ufoLib2/_version.py --- old/ufolib2-0.17.1/src/ufoLib2/_version.py 2025-01-21 13:30:19.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2/_version.py 2025-07-10 13:40:38.000000000 +0200 @@ -1,8 +1,13 @@ -# file generated by setuptools_scm +# file generated by setuptools-scm # don't change, don't track in version control + +__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"] + TYPE_CHECKING = False if TYPE_CHECKING: - from typing import Tuple, Union + from typing import Tuple + from typing import Union + VERSION_TUPLE = Tuple[Union[int, str], ...] else: VERSION_TUPLE = object @@ -12,5 +17,5 @@ __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE -__version__ = version = '0.17.1' -__version_tuple__ = version_tuple = (0, 17, 1) +__version__ = version = '0.18.1' +__version_tuple__ = version_tuple = (0, 18, 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2/objects/font.py new/ufolib2-0.18.1/src/ufoLib2/objects/font.py --- old/ufolib2-0.17.1/src/ufoLib2/objects/font.py 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2/objects/font.py 2025-07-10 13:40:29.000000000 +0200 @@ -2,6 +2,8 @@ import os import shutil +import sys +import tempfile from typing import ( Any, Dict, @@ -16,8 +18,6 @@ cast, ) -import fs.base -import fs.tempfs from attrs import define, field from fontTools.ufoLib import UFOFileStructure, UFOReader, UFOWriter @@ -48,7 +48,7 @@ _setstate_attrs, ) from ufoLib2.serde import serde -from ufoLib2.typing import HasIdentifier, PathLike, T +from ufoLib2.typing import PATH_TYPES, HasIdentifier, PathLike, T def _convert_LayerSet(value: LayerSet | Iterable[Layer]) -> LayerSet: @@ -532,7 +532,7 @@ def save( self, - path: PathLike | fs.base.FS | None = None, + path: PathLike | None = None, formatVersion: int = 3, structure: UFOFileStructure | None = None, overwrite: bool = False, @@ -541,9 +541,8 @@ """Saves the font to ``path``. Args: - path: The target path. If it is None, the path from the last save (except - when that was a ``fs.base.FS``) or when the font was first opened will - be used. + path: The target path. If it is None, the path from the last save or when + the font was first opened will be used. formatVersion: The version to save the UFO as. Only version 3 is supported currently. structure (fontTools.ufoLib.UFOFileStructure): How to store the UFO. @@ -567,8 +566,8 @@ structure = self._fileStructure # Normalize path unless we're given a fs.base.FS, which we pass to UFOWriter. - if path is not None and not isinstance(path, fs.base.FS): - path = os.path.normpath(os.fspath(path)) + if path is not None and isinstance(path, PATH_TYPES): + path = os.fsdecode(os.path.normpath(os.fspath(path))) overwritePath = tmp = None @@ -577,8 +576,11 @@ if isinstance(path, str) and os.path.exists(path): if overwrite: overwritePath = path - tmp = fs.tempfs.TempFS() - path = tmp.getsyspath(os.path.basename(path)) + if sys.version_info < (3, 10): + tmp = tempfile.TemporaryDirectory() + else: + tmp = tempfile.TemporaryDirectory(ignore_cleanup_errors=True) + path = os.path.join(tmp.name, os.path.basename(path)) else: import errno @@ -608,12 +610,15 @@ finally: # clean up the temporary directory if tmp is not None: - tmp.close() + try: + tmp.cleanup() + except PermissionError: + pass # Only remember path if it isn't a fs.base.FS because not all FS objects are # OsFS with a corresponding filesystem path. E.g. think about MemoryFS. # If you want, you can call getsyspath("") method of OsFS object and set that to # self._path. But you then have to catch the fs.errors.NoSysPath and skip if # the FS object does not implement a filesystem path. - if not isinstance(path, fs.base.FS): + if isinstance(path, str): self._path = path diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2/objects/info/__init__.py new/ufolib2-0.18.1/src/ufoLib2/objects/info/__init__.py --- old/ufolib2-0.17.1/src/ufoLib2/objects/info/__init__.py 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2/objects/info/__init__.py 2025-07-10 13:40:29.000000000 +0200 @@ -93,7 +93,7 @@ class WidthClass(IntEnum): ULTRA_CONDENSED = 1 - EXTRA_CONDESED = 2 + EXTRA_CONDENSED = 2 CONDENSED = 3 SEMI_CONDENSED = 4 NORMAL = 5 # alias for WidthClass.MEDIUM @@ -138,7 +138,7 @@ def _convert_WoffMetadataExtensions( - values: Sequence[WoffMetadataExtension | Mapping[str, Any]] | None + values: Sequence[WoffMetadataExtension | Mapping[str, Any]] | None, ) -> list[WoffMetadataExtension] | None: return _convert_optional_list_of_dicts(WoffMetadataExtension, values) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2/serde/util.py new/ufolib2-0.18.1/src/ufoLib2/serde/util.py --- old/ufolib2-0.17.1/src/ufoLib2/serde/util.py 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2/serde/util.py 2025-07-10 13:40:29.000000000 +0200 @@ -10,7 +10,7 @@ fp = cast(BinaryIO, fp) return fp.read() else: - fp = cast(PathLike, fp) + fp = cast(PathLike, fp) # type: ignore with open(fp, "rb") as f: return f.read() @@ -20,6 +20,6 @@ fp = cast(BinaryIO, fp) fp.write(data) else: - fp = cast(PathLike, fp) + fp = cast(PathLike, fp) # type: ignore with open(fp, "wb") as f: f.write(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2/typing.py new/ufolib2-0.18.1/src/ufoLib2/typing.py --- old/ufolib2-0.17.1/src/ufoLib2/typing.py 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2/typing.py 2025-07-10 13:40:29.000000000 +0200 @@ -12,6 +12,9 @@ PathLike = Union[str, bytes, "os.PathLike[str]", "os.PathLike[bytes]"] """Represents a path in various possible forms.""" +# can be used with isinstance at runtime to check if something is a path +PATH_TYPES = (str, bytes, os.PathLike) + class Drawable(Protocol): """Stand-in for an object that can draw itself with a given pen. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2.egg-info/PKG-INFO new/ufolib2-0.18.1/src/ufoLib2.egg-info/PKG-INFO --- old/ufolib2-0.17.1/src/ufoLib2.egg-info/PKG-INFO 2025-01-21 13:30:19.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2.egg-info/PKG-INFO 2025-07-10 13:40:38.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: ufoLib2 -Version: 0.17.1 +Version: 0.18.1 Summary: ufoLib2 is a UFO font processing library. Author-email: Adrien Tétar <[email protected]> License: Apache 2.0 @@ -12,21 +12,22 @@ Classifier: Intended Audience :: End Users/Desktop Classifier: Topic :: Text Processing :: Fonts Classifier: License :: OSI Approved :: Apache Software License -Requires-Python: >=3.8 +Requires-Python: >=3.9 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: attrs>=22.1.0 -Requires-Dist: fonttools[ufo]>=4.0.0 +Requires-Dist: fonttools[ufo]>=4.58.0 Provides-Extra: lxml Requires-Dist: lxml; extra == "lxml" Provides-Extra: converters -Requires-Dist: cattrs>=24.1; extra == "converters" +Requires-Dist: cattrs>=25.1.1; extra == "converters" Provides-Extra: json -Requires-Dist: cattrs>=24.1; extra == "json" +Requires-Dist: cattrs>=25.1.1; extra == "json" Requires-Dist: orjson; platform_python_implementation != "PyPy" and extra == "json" Provides-Extra: msgpack -Requires-Dist: cattrs>=24.1; extra == "msgpack" +Requires-Dist: cattrs>=25.1.1; extra == "msgpack" Requires-Dist: msgpack; extra == "msgpack" +Dynamic: license-file # ufoLib2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/src/ufoLib2.egg-info/requires.txt new/ufolib2-0.18.1/src/ufoLib2.egg-info/requires.txt --- old/ufolib2-0.17.1/src/ufoLib2.egg-info/requires.txt 2025-01-21 13:30:19.000000000 +0100 +++ new/ufolib2-0.18.1/src/ufoLib2.egg-info/requires.txt 2025-07-10 13:40:38.000000000 +0200 @@ -1,11 +1,11 @@ attrs>=22.1.0 -fonttools[ufo]>=4.0.0 +fonttools[ufo]>=4.58.0 [converters] -cattrs>=24.1 +cattrs>=25.1.1 [json] -cattrs>=24.1 +cattrs>=25.1.1 [json:platform_python_implementation != "PyPy"] orjson @@ -14,5 +14,5 @@ lxml [msgpack] -cattrs>=24.1 +cattrs>=25.1.1 msgpack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/tests/test_ufoLib2.py new/ufolib2-0.18.1/tests/test_ufoLib2.py --- old/ufolib2-0.17.1/tests/test_ufoLib2.py 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/tests/test_ufoLib2.py 2025-07-10 13:40:29.000000000 +0200 @@ -1,5 +1,6 @@ from __future__ import annotations +import zipfile from copy import deepcopy from pathlib import Path from typing import Any, Type @@ -241,7 +242,7 @@ ] # setter should clear existing guidelines - font.guidelines = [{"x": 100}, ufoLib2.objects.Guideline(y=20)] # type: ignore + font.guidelines = [{"x": 100}, ufoLib2.objects.Guideline(y=20)] assert len(font.guidelines) == 2 assert font.guidelines == [ @@ -284,3 +285,27 @@ assert not isinstance(obj, attr_type) setattr(o, attr_name, obj) assert isinstance(getattr(o, attr_name), attr_type) + + [email protected]( + "structure", [ufoLib.UFOFileStructure.PACKAGE, ufoLib.UFOFileStructure.ZIP] +) +def test_save_again_to_existing_path( + tmp_path: Path, structure: ufoLib.UFOFileStructure +) -> None: + font = Font() + ufo_name = "foo.ufoz" if structure == ufoLib.UFOFileStructure.ZIP else "foo.ufo" + font.save(tmp_path / ufo_name, structure=structure) + + # without the overwrite flag, this should fail + with pytest.raises(OSError, match="already exists"): + font.save(tmp_path / ufo_name, structure=structure) + + # with the overwrite flag, it should succeed + font.save(tmp_path / ufo_name, overwrite=True, structure=structure) + + if structure == ufoLib.UFOFileStructure.PACKAGE: + assert (tmp_path / ufo_name).is_dir() + else: + assert (tmp_path / ufo_name).is_file() + assert zipfile.is_zipfile(tmp_path / ufo_name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ufolib2-0.17.1/tox.ini new/ufolib2-0.18.1/tox.ini --- old/ufolib2-0.17.1/tox.ini 2025-01-21 13:30:04.000000000 +0100 +++ new/ufolib2-0.18.1/tox.ini 2025-07-10 13:40:29.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -envlist = lint, py3{8,9,10,11,12,13}-cov, htmlcov +envlist = lint, py3{9,10,11,12,13}-cov, htmlcov isolated_build = true [testenv]
