1
0
Fork 0

Adding upstream version 3.6.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-09 21:45:51 +01:00
parent 3e8db4df26
commit 0e9e0db1eb
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
55 changed files with 266 additions and 248 deletions

View file

@ -5,9 +5,9 @@ import logging
import re
import shlex
import sys
from collections.abc import Sequence
from typing import Any
from typing import NamedTuple
from typing import Sequence
import cfgv
from identify.identify import ALL_TAGS
@ -102,6 +102,13 @@ class StagesMigration(StagesMigrationNoDefault):
MANIFEST_HOOK_DICT = cfgv.Map(
'Hook', 'id',
# check first in case it uses some newer, incompatible feature
cfgv.Optional(
'minimum_pre_commit_version',
cfgv.check_and(cfgv.check_string, check_min_version),
'0',
),
cfgv.Required('id', cfgv.check_string),
cfgv.Required('name', cfgv.check_string),
cfgv.Required('entry', cfgv.check_string),
@ -124,7 +131,6 @@ MANIFEST_HOOK_DICT = cfgv.Map(
cfgv.Optional('description', cfgv.check_string, ''),
cfgv.Optional('language_version', cfgv.check_string, C.DEFAULT),
cfgv.Optional('log_file', cfgv.check_string, ''),
cfgv.Optional('minimum_pre_commit_version', cfgv.check_string, '0'),
cfgv.Optional('require_serial', cfgv.check_bool, False),
StagesMigration('stages', []),
cfgv.Optional('verbose', cfgv.check_bool, False),
@ -345,6 +351,13 @@ DEFAULT_LANGUAGE_VERSION = cfgv.Map(
CONFIG_SCHEMA = cfgv.Map(
'Config', None,
# check first in case it uses some newer, incompatible feature
cfgv.Optional(
'minimum_pre_commit_version',
cfgv.check_and(cfgv.check_string, check_min_version),
'0',
),
cfgv.RequiredRecurse('repos', cfgv.Array(CONFIG_REPO_DICT)),
cfgv.Optional(
'default_install_hook_types',
@ -358,11 +371,6 @@ CONFIG_SCHEMA = cfgv.Map(
cfgv.Optional('files', check_string_regex, ''),
cfgv.Optional('exclude', check_string_regex, '^$'),
cfgv.Optional('fail_fast', cfgv.check_bool, False),
cfgv.Optional(
'minimum_pre_commit_version',
cfgv.check_and(cfgv.check_string, check_min_version),
'0',
),
cfgv.WarnAdditionalKeys(
(
'repos',

View file

@ -4,9 +4,9 @@ import concurrent.futures
import os.path
import re
import tempfile
from collections.abc import Sequence
from typing import Any
from typing import NamedTuple
from typing import Sequence
import pre_commit.constants as C
from pre_commit import git

View file

@ -4,7 +4,7 @@ import argparse
import os.path
import subprocess
import sys
from typing import Sequence
from collections.abc import Sequence
from pre_commit.commands.run import run
from pre_commit.envcontext import envcontext

View file

@ -9,11 +9,11 @@ import re
import subprocess
import time
import unicodedata
from collections.abc import Generator
from collections.abc import Iterable
from collections.abc import MutableMapping
from collections.abc import Sequence
from typing import Any
from typing import Generator
from typing import Iterable
from typing import MutableMapping
from typing import Sequence
from identify.identify import tags_from_path
@ -74,7 +74,7 @@ class Classifier:
def __init__(self, filenames: Iterable[str]) -> None:
self.filenames = [f for f in filenames if os.path.lexists(f)]
@functools.lru_cache(maxsize=None)
@functools.cache
def _types_for_file(self, filename: str) -> set[str]:
return tags_from_path(filename)

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Sequence
from collections.abc import Sequence
from pre_commit import clientlib

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Sequence
from collections.abc import Sequence
from pre_commit import clientlib

View file

@ -3,10 +3,9 @@ from __future__ import annotations
import contextlib
import enum
import os
from typing import Generator
from typing import MutableMapping
from collections.abc import Generator
from collections.abc import MutableMapping
from typing import NamedTuple
from typing import Tuple
from typing import Union
_Unset = enum.Enum('_Unset', 'UNSET')
@ -18,9 +17,9 @@ class Var(NamedTuple):
default: str = ''
SubstitutionT = Tuple[Union[str, Var], ...]
SubstitutionT = tuple[Union[str, Var], ...]
ValueT = Union[str, _Unset, SubstitutionT]
PatchesT = Tuple[Tuple[str, ValueT], ...]
PatchesT = tuple[tuple[str, ValueT], ...]
def format_env(parts: SubstitutionT, env: MutableMapping[str, str]) -> str:

View file

@ -5,7 +5,7 @@ import functools
import os.path
import sys
import traceback
from typing import Generator
from collections.abc import Generator
from typing import IO
import pre_commit.constants as C

View file

@ -3,8 +3,8 @@ from __future__ import annotations
import contextlib
import errno
import sys
from collections.abc import Generator
from typing import Callable
from typing import Generator
if sys.platform == 'win32': # pragma: no cover (windows)

View file

@ -3,7 +3,7 @@ from __future__ import annotations
import logging
import os.path
import sys
from typing import Mapping
from collections.abc import Mapping
from pre_commit.errors import FatalError
from pre_commit.util import CalledProcessError

View file

@ -1,9 +1,9 @@
from __future__ import annotations
import logging
from collections.abc import Sequence
from typing import Any
from typing import NamedTuple
from typing import Sequence
from pre_commit.prefix import Prefix

View file

@ -5,12 +5,12 @@ import os
import random
import re
import shlex
from collections.abc import Generator
from collections.abc import Sequence
from typing import Any
from typing import ContextManager
from typing import Generator
from typing import NoReturn
from typing import Protocol
from typing import Sequence
import pre_commit.constants as C
from pre_commit import parse_shebang

View file

@ -3,8 +3,8 @@ from __future__ import annotations
import contextlib
import os
import sys
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -2,8 +2,8 @@ from __future__ import annotations
import contextlib
import os.path
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -4,8 +4,8 @@ import contextlib
import os.path
import shutil
import tempfile
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -3,7 +3,7 @@ from __future__ import annotations
import hashlib
import json
import os
from typing import Sequence
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.prefix import Prefix

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Sequence
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.languages.docker import docker_cmd

View file

@ -6,8 +6,8 @@ import re
import tempfile
import xml.etree.ElementTree
import zipfile
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Sequence
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.prefix import Prefix

View file

@ -12,11 +12,11 @@ import tempfile
import urllib.error
import urllib.request
import zipfile
from collections.abc import Generator
from collections.abc import Sequence
from typing import ContextManager
from typing import Generator
from typing import IO
from typing import Protocol
from typing import Sequence
import pre_commit.constants as C
from pre_commit import lang_base

View file

@ -2,8 +2,8 @@ from __future__ import annotations
import contextlib
import os.path
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -3,8 +3,8 @@ from __future__ import annotations
import contextlib
import os
import sys
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -4,8 +4,8 @@ import contextlib
import functools
import os
import sys
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
import pre_commit.constants as C
from pre_commit import lang_base

View file

@ -3,8 +3,8 @@ from __future__ import annotations
import contextlib
import os
import shlex
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -3,9 +3,9 @@ from __future__ import annotations
import argparse
import re
import sys
from collections.abc import Sequence
from re import Pattern
from typing import NamedTuple
from typing import Pattern
from typing import Sequence
from pre_commit import lang_base
from pre_commit import output

View file

@ -4,8 +4,8 @@ import contextlib
import functools
import os
import sys
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
import pre_commit.constants as C
from pre_commit import lang_base
@ -24,7 +24,7 @@ ENVIRONMENT_DIR = 'py_env'
run_hook = lang_base.basic_run_hook
@functools.lru_cache(maxsize=None)
@functools.cache
def _version_info(exe: str) -> str:
prog = 'import sys;print(".".join(str(p) for p in sys.version_info))'
try:
@ -65,7 +65,7 @@ def _find_by_py_launcher(
version: str,
) -> str | None: # pragma: no cover (windows only)
if version.startswith('python'):
num = version[len('python'):]
num = version.removeprefix('python')
cmd = ('py', f'-{num}', '-c', 'import sys; print(sys.executable)')
env = dict(os.environ, PYTHONIOENCODING='UTF-8')
try:
@ -124,7 +124,7 @@ def _sys_executable_matches(version: str) -> bool:
return False
try:
info = tuple(int(p) for p in version[len('python'):].split('.'))
info = tuple(int(p) for p in version.removeprefix('python').split('.'))
except ValueError:
return False

View file

@ -6,8 +6,8 @@ import shlex
import shutil
import tempfile
import textwrap
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -6,9 +6,9 @@ import importlib.resources
import os.path
import shutil
import tarfile
from typing import Generator
from collections.abc import Generator
from collections.abc import Sequence
from typing import IO
from typing import Sequence
import pre_commit.constants as C
from pre_commit import lang_base
@ -25,7 +25,8 @@ run_hook = lang_base.basic_run_hook
def _resource_bytesio(filename: str) -> IO[bytes]:
return importlib.resources.open_binary('pre_commit.resources', filename)
files = importlib.resources.files('pre_commit.resources')
return files.joinpath(filename).open('rb')
@functools.lru_cache(maxsize=1)

View file

@ -7,8 +7,8 @@ import shutil
import sys
import tempfile
import urllib.request
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
import pre_commit.constants as C
from pre_commit import lang_base
@ -134,7 +134,7 @@ def install_environment(
packages_to_install: set[tuple[str, ...]] = {('--path', '.')}
for cli_dep in cli_deps:
cli_dep = cli_dep[len('cli:'):]
cli_dep = cli_dep.removeprefix('cli:')
package, _, crate_version = cli_dep.partition(':')
if crate_version != '':
packages_to_install.add((package, '--version', crate_version))

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import Sequence
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.prefix import Prefix

View file

@ -2,8 +2,8 @@ from __future__ import annotations
import contextlib
import os
from typing import Generator
from typing import Sequence
from collections.abc import Generator
from collections.abc import Sequence
from pre_commit import lang_base
from pre_commit.envcontext import envcontext

View file

@ -2,7 +2,7 @@ from __future__ import annotations
import contextlib
import logging
from typing import Generator
from collections.abc import Generator
from pre_commit import color
from pre_commit import output

View file

@ -4,7 +4,7 @@ import argparse
import logging
import os
import sys
from typing import Sequence
from collections.abc import Sequence
import pre_commit.constants as C
from pre_commit import clientlib

View file

@ -1,7 +1,7 @@
from __future__ import annotations
import argparse
from typing import Sequence
from collections.abc import Sequence
import pre_commit.constants as C
from pre_commit import git

View file

@ -2,8 +2,8 @@ from __future__ import annotations
import argparse
import re
from typing import Iterable
from typing import Sequence
from collections.abc import Iterable
from collections.abc import Sequence
from cfgv import apply_defaults

View file

@ -1,7 +1,7 @@
from __future__ import annotations
import sys
from typing import Sequence
from collections.abc import Sequence
from pre_commit import output

View file

@ -1,7 +1,7 @@
from __future__ import annotations
import os.path
from typing import Mapping
from collections.abc import Mapping
from typing import NoReturn
from identify.identify import parse_shebang_from_file

View file

@ -4,15 +4,14 @@ import json
import logging
import os
import shlex
from collections.abc import Sequence
from typing import Any
from typing import Sequence
import pre_commit.constants as C
from pre_commit.all_languages import languages
from pre_commit.clientlib import load_manifest
from pre_commit.clientlib import LOCAL
from pre_commit.clientlib import META
from pre_commit.clientlib import parse_version
from pre_commit.hook import Hook
from pre_commit.lang_base import environment_dir
from pre_commit.prefix import Prefix
@ -124,15 +123,6 @@ def _hook(
for dct in rest:
ret.update(dct)
version = ret['minimum_pre_commit_version']
if parse_version(version) > parse_version(C.VERSION):
logger.error(
f'The hook `{ret["id"]}` requires pre-commit version {version} '
f'but version {C.VERSION} is installed. '
f'Perhaps run `pip install --upgrade pre-commit`.',
)
exit(1)
lang = ret['language']
if ret['language_version'] == C.DEFAULT:
ret['language_version'] = root_config['default_language_version'][lang]

View file

@ -4,7 +4,7 @@ import contextlib
import logging
import os.path
import time
from typing import Generator
from collections.abc import Generator
from pre_commit import git
from pre_commit.errors import FatalError

View file

@ -5,9 +5,9 @@ import logging
import os.path
import sqlite3
import tempfile
from collections.abc import Generator
from collections.abc import Sequence
from typing import Callable
from typing import Generator
from typing import Sequence
import pre_commit.constants as C
from pre_commit import file_lock

View file

@ -8,10 +8,10 @@ import shutil
import stat
import subprocess
import sys
from collections.abc import Generator
from types import TracebackType
from typing import Any
from typing import Callable
from typing import Generator
from pre_commit import parse_shebang
@ -36,7 +36,8 @@ def clean_path_on_failure(path: str) -> Generator[None, None, None]:
def resource_text(filename: str) -> str:
return importlib.resources.read_text('pre_commit.resources', filename)
files = importlib.resources.files('pre_commit.resources')
return files.joinpath(filename).read_text()
def make_executable(filename: str) -> None:
@ -201,24 +202,36 @@ else: # pragma: no cover
cmd_output_p = cmd_output_b
def rmtree(path: str) -> None:
"""On windows, rmtree fails for readonly dirs."""
def handle_remove_readonly(
func: Callable[..., Any],
path: str,
exc: tuple[type[OSError], OSError, TracebackType],
def _handle_readonly(
func: Callable[[str], object],
path: str,
exc: OSError,
) -> None:
if (
func in (os.rmdir, os.remove, os.unlink) and
exc.errno in {errno.EACCES, errno.EPERM}
):
for p in (path, os.path.dirname(path)):
os.chmod(p, os.stat(p).st_mode | stat.S_IWUSR)
func(path)
else:
raise
if sys.version_info < (3, 12): # pragma: <3.12 cover
def _handle_readonly_old(
func: Callable[[str], object],
path: str,
excinfo: tuple[type[OSError], OSError, TracebackType],
) -> None:
excvalue = exc[1]
if (
func in (os.rmdir, os.remove, os.unlink) and
excvalue.errno in {errno.EACCES, errno.EPERM}
):
for p in (path, os.path.dirname(path)):
os.chmod(p, os.stat(p).st_mode | stat.S_IWUSR)
func(path)
else:
raise
shutil.rmtree(path, ignore_errors=False, onerror=handle_remove_readonly)
return _handle_readonly(func, path, excinfo[1])
def rmtree(path: str) -> None:
shutil.rmtree(path, ignore_errors=False, onerror=_handle_readonly_old)
else: # pragma: >=3.12 cover
def rmtree(path: str) -> None:
"""On windows, rmtree fails for readonly dirs."""
shutil.rmtree(path, ignore_errors=False, onexc=_handle_readonly)
def win_exe(s: str) -> str:

View file

@ -7,12 +7,12 @@ import multiprocessing
import os
import subprocess
import sys
from collections.abc import Generator
from collections.abc import Iterable
from collections.abc import MutableMapping
from collections.abc import Sequence
from typing import Any
from typing import Callable
from typing import Generator
from typing import Iterable
from typing import MutableMapping
from typing import Sequence
from typing import TypeVar
from pre_commit import parse_shebang