diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 621334c2..2f81af86 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -104,7 +104,7 @@ jobs: strategy: matrix: python: - - 39 + - 312 platform: - windows-latest runs-on: ${{ matrix.platform }} @@ -131,7 +131,9 @@ jobs: python -m pip install tox - name: Run tests shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0} - run: python -m tox + run: | + git config --global --add safe.directory '*' + python -m tox test_msys2_mingw: strategy: @@ -147,6 +149,7 @@ jobs: - uses: msys2/setup-msys2@v2 with: msystem: ${{matrix.sys}} + update: true install: | mingw-w64-${{matrix.env}}-toolchain mingw-w64-${{matrix.env}}-python diff --git a/distutils/tests/test_filelist.py b/distutils/tests/test_filelist.py index 130e6fb5..765b0a89 100644 --- a/distutils/tests/test_filelist.py +++ b/distutils/tests/test_filelist.py @@ -3,6 +3,7 @@ import logging import os import re +import sys from distutils import debug, filelist from distutils.errors import DistutilsTemplateError from distutils.filelist import FileList, glob_to_re, translate_pattern @@ -49,18 +50,21 @@ def test_glob_to_re(self): if os.sep == '\\': sep = re.escape(os.sep) + # https://docs.python.org/3/whatsnew/3.14.html#re + end = r"\z" if sys.version_info >= (3, 14) else r"\Z" + for glob, regex in ( # simple cases - ('foo*', r'(?s:foo[^%(sep)s]*)\Z'), - ('foo?', r'(?s:foo[^%(sep)s])\Z'), - ('foo??', r'(?s:foo[^%(sep)s][^%(sep)s])\Z'), + ('foo*', r'(?s:foo[^%(sep)s]*)%(end)s'), + ('foo?', r'(?s:foo[^%(sep)s])%(end)s'), + ('foo??', r'(?s:foo[^%(sep)s][^%(sep)s])%(end)s'), # special cases - (r'foo\\*', r'(?s:foo\\\\[^%(sep)s]*)\Z'), - (r'foo\\\*', r'(?s:foo\\\\\\[^%(sep)s]*)\Z'), - ('foo????', r'(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])\Z'), - (r'foo\\??', r'(?s:foo\\\\[^%(sep)s][^%(sep)s])\Z'), + (r'foo\\*', r'(?s:foo\\\\[^%(sep)s]*)%(end)s'), + (r'foo\\\*', r'(?s:foo\\\\\\[^%(sep)s]*)%(end)s'), + ('foo????', r'(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])%(end)s'), + (r'foo\\??', r'(?s:foo\\\\[^%(sep)s][^%(sep)s])%(end)s'), ): - regex = regex % {'sep': sep} + regex = regex % {'sep': sep, 'end': end} assert glob_to_re(glob) == regex def test_process_template_line(self): diff --git a/distutils/tests/test_util.py b/distutils/tests/test_util.py index 00c9743e..39d949cb 100644 --- a/distutils/tests/test_util.py +++ b/distutils/tests/test_util.py @@ -43,14 +43,7 @@ def environment(monkeypatch): @pytest.mark.usefixtures('save_env') class TestUtil: def test_get_host_platform(self): - with mock.patch('os.name', 'nt'): - with mock.patch('sys.version', '... [... (ARM64)]'): - assert get_host_platform() == 'win-arm64' - with mock.patch('sys.version', '... [... (ARM)]'): - assert get_host_platform() == 'win-arm32' - - with mock.patch('sys.version_info', (3, 9, 0, 'final', 0)): - assert get_host_platform() == stdlib_sysconfig.get_platform() + assert get_host_platform() == stdlib_sysconfig.get_platform() def test_get_platform(self): with mock.patch('os.name', 'nt'): diff --git a/pyproject.toml b/pyproject.toml index b4a2fed8..2bf4c93d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,6 +67,7 @@ doc = [ check = [ "pytest-checkdocs >= 2.14", "pytest-ruff >= 0.2.1; sys_platform != 'cygwin'", + "ruff == 0.13.3; sys_platform != 'cygwin'", ] cover = [ @@ -82,6 +83,7 @@ type = [ # Exclude PyPy from type checks (python/mypy#20454 jaraco/skeleton#187) "pytest-mypy >= 1.0.1; platform_python_implementation != 'PyPy'", + "mypy == 1.15.0", # local "types-docutils", diff --git a/ruff.toml b/ruff.toml index 06aa2304..fcc4cf0f 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,3 +1,5 @@ +target-version = "py39" + [lint] extend-select = [ # upstream