From fd53cdea17ed17a1775fc5e23e75d6ecdbdb04b6 Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Fri, 12 Jun 2020 13:26:29 +0200 Subject: [PATCH 001/129] Add foor missing required dependencies in CONTRIBUTING.md There could still be missing dependencies, I'm not using a fresh environement to test that. Also added the specific required git version see https://github.com/git/git/blob/master/Documentation/RelNotes/2.24.0.txt --- CONTRIBUTING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d70a89dd9..76df43705 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,12 +4,16 @@ - The complete test suite depends on having at least the following installed (possibly not a complete list) - - git (A sufficiently newer version is required to run pre-push tests) + - git (Version 2.24.0 or above is required to run pre-merge-commit tests) - python2 (Required by a test which checks different python versions) - python3 (Required by a test which checks different python versions) - tox (or virtualenv) - ruby + gem - docker + - conda + - cargo (required by tests for rust dependencies) + - go (required by tests for go dependencies) + - swift ### Setting up an environment From e1e6a32c512275e4f7bf7a057bc5d4baa27303fa Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 15 Jun 2020 13:50:47 -0700 Subject: [PATCH 002/129] skip rbenv if ruby and gem are installed with default language_version --- azure-pipelines.yml | 1 + pre_commit/languages/ruby.py | 73 +++++++++++++++++++++++------------- testing/util.py | 4 -- tests/languages/ruby_test.py | 32 ++++++++++++++-- tests/repository_test.py | 7 +--- 5 files changed, 78 insertions(+), 39 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c21843e10..fb400107d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,6 +19,7 @@ jobs: toxenvs: [py37] os: windows pre_test: + - task: UseRubyVersion@0 - powershell: Write-Host "##vso[task.prependpath]$env:CONDA\Scripts" displayName: Add conda to PATH - powershell: | diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index fe524ec3a..73b23cc07 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -1,4 +1,5 @@ import contextlib +import functools import os.path import shutil import tarfile @@ -7,6 +8,7 @@ from typing import Tuple import pre_commit.constants as C +from pre_commit import parse_shebang from pre_commit.envcontext import envcontext from pre_commit.envcontext import PatchesT from pre_commit.envcontext import UNSET @@ -19,33 +21,51 @@ from pre_commit.util import resource_bytesio ENVIRONMENT_DIR = 'rbenv' -get_default_version = helpers.basic_get_default_version healthy = helpers.basic_healthy +@functools.lru_cache(maxsize=1) +def get_default_version() -> str: + if all(parse_shebang.find_executable(exe) for exe in ('ruby', 'gem')): + return 'system' + else: + return C.DEFAULT + + def get_env_patch( venv: str, language_version: str, -) -> PatchesT: # pragma: win32 no cover +) -> PatchesT: patches: PatchesT = ( ('GEM_HOME', os.path.join(venv, 'gems')), ('GEM_PATH', UNSET), - ('RBENV_ROOT', venv), ('BUNDLE_IGNORE_CONFIG', '1'), - ( - 'PATH', ( - os.path.join(venv, 'gems', 'bin'), os.pathsep, - os.path.join(venv, 'shims'), os.pathsep, - os.path.join(venv, 'bin'), os.pathsep, Var('PATH'), - ), - ), ) - if language_version != C.DEFAULT: - patches += (('RBENV_VERSION', language_version),) + if language_version == 'system': + patches += ( + ( + 'PATH', ( + os.path.join(venv, 'gems', 'bin'), os.pathsep, + Var('PATH'), + ), + ), + ) + else: # pragma: win32 no cover + patches += ( + ('RBENV_ROOT', venv), + ('RBENV_VERSION', language_version), + ( + 'PATH', ( + os.path.join(venv, 'gems', 'bin'), os.pathsep, + os.path.join(venv, 'shims'), os.pathsep, + os.path.join(venv, 'bin'), os.pathsep, Var('PATH'), + ), + ), + ) return patches -@contextlib.contextmanager # pragma: win32 no cover +@contextlib.contextmanager def in_env( prefix: Prefix, language_version: str, @@ -65,7 +85,7 @@ def _extract_resource(filename: str, dest: str) -> None: def _install_rbenv( prefix: Prefix, - version: str = C.DEFAULT, + version: str, ) -> None: # pragma: win32 no cover directory = helpers.environment_dir(ENVIRONMENT_DIR, version) @@ -92,21 +112,22 @@ def _install_ruby( def install_environment( prefix: Prefix, version: str, additional_dependencies: Sequence[str], -) -> None: # pragma: win32 no cover +) -> None: additional_dependencies = tuple(additional_dependencies) directory = helpers.environment_dir(ENVIRONMENT_DIR, version) with clean_path_on_failure(prefix.path(directory)): - # TODO: this currently will fail if there's no version specified and - # there's no system ruby installed. Is this ok? - _install_rbenv(prefix, version=version) - with in_env(prefix, version): - # Need to call this before installing so rbenv's directories are - # set up - helpers.run_setup_cmd(prefix, ('rbenv', 'init', '-')) - if version != C.DEFAULT: + if version != 'system': # pragma: win32 no cover + _install_rbenv(prefix, version) + with in_env(prefix, version): + # Need to call this before installing so rbenv's directories + # are set up + helpers.run_setup_cmd(prefix, ('rbenv', 'init', '-')) + # XXX: this will *always* fail if `version == C.DEFAULT` _install_ruby(prefix, version) - # Need to call this after installing to set up the shims - helpers.run_setup_cmd(prefix, ('rbenv', 'rehash')) + # Need to call this after installing to set up the shims + helpers.run_setup_cmd(prefix, ('rbenv', 'rehash')) + + with in_env(prefix, version): helpers.run_setup_cmd( prefix, ('gem', 'build', *prefix.star('.gemspec')), ) @@ -123,6 +144,6 @@ def run_hook( hook: Hook, file_args: Sequence[str], color: bool, -) -> Tuple[int, bytes]: # pragma: win32 no cover +) -> Tuple[int, bytes]: with in_env(hook.prefix, hook.language_version): return helpers.run_xargs(hook, hook.cmd, file_args, color=color) diff --git a/testing/util.py b/testing/util.py index bfe142188..4edb7a9ec 100644 --- a/testing/util.py +++ b/testing/util.py @@ -38,10 +38,6 @@ def cmd_output_mocked_pre_commit_home( parse_shebang.find_executable('swift') is None, reason="swift isn't installed or can't be found", ) -xfailif_windows_no_ruby = pytest.mark.xfail( - os.name == 'nt', - reason='Ruby support not yet implemented on windows.', -) xfailif_windows = pytest.mark.xfail(os.name == 'nt', reason='windows') diff --git a/tests/languages/ruby_test.py b/tests/languages/ruby_test.py index 36a029d17..853bb7321 100644 --- a/tests/languages/ruby_test.py +++ b/tests/languages/ruby_test.py @@ -1,15 +1,39 @@ import os.path +from unittest import mock +import pytest + +import pre_commit.constants as C +from pre_commit import parse_shebang from pre_commit.languages import ruby from pre_commit.prefix import Prefix from pre_commit.util import cmd_output -from testing.util import xfailif_windows_no_ruby +from testing.util import xfailif_windows + + +ACTUAL_GET_DEFAULT_VERSION = ruby.get_default_version.__wrapped__ + + +@pytest.fixture +def find_exe_mck(): + with mock.patch.object(parse_shebang, 'find_executable') as mck: + yield mck + + +def test_uses_default_version_when_not_available(find_exe_mck): + find_exe_mck.return_value = None + assert ACTUAL_GET_DEFAULT_VERSION() == C.DEFAULT + + +def test_uses_system_if_both_gem_and_ruby_are_available(find_exe_mck): + find_exe_mck.return_value = '/path/to/exe' + assert ACTUAL_GET_DEFAULT_VERSION() == 'system' -@xfailif_windows_no_ruby +@xfailif_windows # pragma: win32 no cover def test_install_rbenv(tempdir_factory): prefix = Prefix(tempdir_factory.get()) - ruby._install_rbenv(prefix) + ruby._install_rbenv(prefix, C.DEFAULT) # Should have created rbenv directory assert os.path.exists(prefix.path('rbenv-default')) @@ -18,7 +42,7 @@ def test_install_rbenv(tempdir_factory): cmd_output('rbenv', '--help') -@xfailif_windows_no_ruby +@xfailif_windows # pragma: win32 no cover def test_install_rbenv_with_version(tempdir_factory): prefix = Prefix(tempdir_factory.get()) ruby._install_rbenv(prefix, version='1.9.3p547') diff --git a/tests/repository_test.py b/tests/repository_test.py index 2ac788634..d3b3dd550 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -34,7 +34,6 @@ from testing.util import skipif_cant_run_docker from testing.util import skipif_cant_run_swift from testing.util import xfailif_windows -from testing.util import xfailif_windows_no_ruby def _norm_out(b): @@ -260,7 +259,6 @@ def test_run_versioned_node_hook(tempdir_factory, store): ) -@xfailif_windows_no_ruby def test_run_a_ruby_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'ruby_hooks_repo', @@ -268,7 +266,7 @@ def test_run_a_ruby_hook(tempdir_factory, store): ) -@xfailif_windows_no_ruby +@xfailif_windows # pragma: win32 no cover def test_run_versioned_ruby_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'ruby_versioned_hooks_repo', @@ -278,7 +276,7 @@ def test_run_versioned_ruby_hook(tempdir_factory, store): ) -@xfailif_windows_no_ruby +@xfailif_windows # pragma: win32 no cover def test_run_ruby_hook_with_disable_shared_gems( tempdir_factory, store, @@ -524,7 +522,6 @@ def test_additional_dependencies_roll_forward(tempdir_factory, store): assert 'mccabe' not in cmd_output('pip', 'freeze', '-l')[1] -@xfailif_windows_no_ruby # pragma: win32 no cover def test_additional_ruby_dependencies_installed(tempdir_factory, store): path = make_repo(tempdir_factory, 'ruby_hooks_repo') config = make_config_from_repo(path) From 1392471854f6a2bdf57bafd3b56c9da183fad331 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 17 Jun 2020 12:55:30 -0700 Subject: [PATCH 003/129] xfail a flaky node test on windows --- tests/repository_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/repository_test.py b/tests/repository_test.py index d3b3dd550..ee57d9924 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -234,6 +234,7 @@ def test_run_a_docker_image_hook(tempdir_factory, store, hook_id): ) +@xfailif_windows # pragma: win32 no cover def test_run_a_node_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'node_hooks_repo', From 6ec47ea73640190d86186fd50b7a32fa0a9c4b9b Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 19 Jun 2020 13:58:14 -0700 Subject: [PATCH 004/129] fix node hooks when NPM_CONFIG_USERCONFIG is set --- pre_commit/languages/node.py | 3 +++ tests/repository_test.py | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index 26f4919e5..d99e6f2c7 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -10,6 +10,7 @@ from pre_commit import parse_shebang from pre_commit.envcontext import envcontext from pre_commit.envcontext import PatchesT +from pre_commit.envcontext import UNSET from pre_commit.envcontext import Var from pre_commit.hook import Hook from pre_commit.languages import helpers @@ -56,6 +57,8 @@ def get_env_patch(venv: str) -> PatchesT: ('NODE_VIRTUAL_ENV', venv), ('NPM_CONFIG_PREFIX', install_prefix), ('npm_config_prefix', install_prefix), + ('NPM_CONFIG_USERCONFIG', UNSET), + ('npm_config_userconfig', UNSET), ('NODE_PATH', os.path.join(venv, lib_dir, 'node_modules')), ('PATH', (bin_dir(venv), os.pathsep, Var('PATH'))), ) diff --git a/tests/repository_test.py b/tests/repository_test.py index ee57d9924..84e4da930 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -260,6 +260,14 @@ def test_run_versioned_node_hook(tempdir_factory, store): ) +@xfailif_windows # pragma: win32 no cover +def test_node_hook_with_npm_userconfig_set(tempdir_factory, store, tmpdir): + cfg = tmpdir.join('cfg') + cfg.write('cache=/dne\n') + with mock.patch.dict(os.environ, NPM_CONFIG_USERCONFIG=str(cfg)): + test_run_a_node_hook(tempdir_factory, store) + + def test_run_a_ruby_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'ruby_hooks_repo', From 6fe1702ee106f4d7f4a8ad73550db2145208ef24 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 1 Jul 2020 12:39:34 -0700 Subject: [PATCH 005/129] v2.6.0 --- CHANGELOG.md | 15 +++++++++++++++ setup.cfg | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 375a9f3b8..c487acf6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +2.6.0 - 2020-07-01 +================== + +### Fixes +- Fix node hooks when `NPM_CONFIG_USERCONFIG` is set + - #1521 PR by @asottile. + - #1516 issue by @rkm. + +### Features +- Skip `rbenv` / `ruby-download` if system ruby is available + - #1509 PR by @asottile. +- Partial support for ruby on windows (if system ruby is installed) + - #1509 PR by @asottile. + - #201 issue by @asottile. + 2.5.1 - 2020-06-09 ================== diff --git a/setup.cfg b/setup.cfg index f1ce18d60..0ce58b1a2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.5.1 +version = 2.6.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From c9ad2e14515537c1f7f3857804f69bb7fb05b3b1 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 8 Jul 2020 13:55:28 -0700 Subject: [PATCH 006/129] upgrade mypy to get typeshed fixes --- .pre-commit-config.yaml | 14 +++++++------- pre_commit/file_lock.py | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 36d73c7ab..e9cf73946 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.5.0 + rev: v3.1.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -12,20 +12,20 @@ repos: - id: requirements-txt-fixer - id: double-quote-string-fixer - repo: https://gitlab.com/pycqa/flake8 - rev: 3.8.0 + rev: 3.8.3 hooks: - id: flake8 additional_dependencies: [flake8-typing-imports==1.6.0] - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: v1.5.2 + rev: v1.5.3 hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.4.0 + rev: v2.6.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.4.1 + rev: v2.6.2 hooks: - id: pyupgrade args: [--py36-plus] @@ -40,11 +40,11 @@ repos: - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/setup-cfg-fmt - rev: v1.9.0 + rev: v1.10.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.770 + rev: v0.782 hooks: - id: mypy exclude: ^testing/resources/ diff --git a/pre_commit/file_lock.py b/pre_commit/file_lock.py index ff0dc5e64..5e7a05862 100644 --- a/pre_commit/file_lock.py +++ b/pre_commit/file_lock.py @@ -21,13 +21,13 @@ def _locked( ) -> Generator[None, None, None]: try: # TODO: https://github.com/python/typeshed/pull/3607 - msvcrt.locking(fileno, msvcrt.LK_NBLCK, _region) # type: ignore + msvcrt.locking(fileno, msvcrt.LK_NBLCK, _region) except OSError: blocked_cb() while True: try: # TODO: https://github.com/python/typeshed/pull/3607 - msvcrt.locking(fileno, msvcrt.LK_LOCK, _region) # type: ignore # noqa: E501 + msvcrt.locking(fileno, msvcrt.LK_LOCK, _region) except OSError as e: # Locking violation. Returned when the _LK_LOCK or _LK_RLCK # flag is specified and the file cannot be locked after 10 @@ -46,7 +46,7 @@ def _locked( # "Regions should be locked only briefly and should be unlocked # before closing a file or exiting the program." # TODO: https://github.com/python/typeshed/pull/3607 - msvcrt.locking(fileno, msvcrt.LK_UNLCK, _region) # type: ignore + msvcrt.locking(fileno, msvcrt.LK_UNLCK, _region) else: # pragma: win32 no cover import fcntl From 7da72563dd3c9c0c73292c9a3ab5cc10061132f6 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 15 Jul 2020 21:07:21 -0700 Subject: [PATCH 007/129] require healthy() after installation --- pre_commit/repository.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pre_commit/repository.py b/pre_commit/repository.py index 77734ee64..91c430555 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -82,6 +82,12 @@ def _hook_install(hook: Hook) -> None: lang.install_environment( hook.prefix, hook.language_version, hook.additional_dependencies, ) + if not lang.healthy(hook.prefix, hook.language_version): + raise AssertionError( + f'BUG: expected environment for {hook.language} to be healthy() ' + f'immediately after install, please open an issue describing ' + f'your environment', + ) # Write our state to indicate we're installed _write_state(hook.prefix, venv, _state(hook.additional_dependencies)) From 1b435f1f1fa7432cbb1b2bef61c3ec0071d036cb Mon Sep 17 00:00:00 2001 From: Greg Singer Date: Sun, 19 Jul 2020 16:37:44 -0500 Subject: [PATCH 008/129] add init-templatedir --no-allow-missing-config Add a `--no-allow-missing-config` option to the `init-templatedir` command. Enable configuration of a Git template that requires newly cloned repos to have a `pre-commit` config. --- pre_commit/commands/init_templatedir.py | 9 +++-- pre_commit/main.py | 7 ++++ tests/commands/init_templatedir_test.py | 48 +++++++++++++++++++++++++ tests/main_test.py | 21 +++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/init_templatedir.py b/pre_commit/commands/init_templatedir.py index f676fb192..5f17d9c12 100644 --- a/pre_commit/commands/init_templatedir.py +++ b/pre_commit/commands/init_templatedir.py @@ -15,10 +15,15 @@ def init_templatedir( store: Store, directory: str, hook_types: Sequence[str], + skip_on_missing_config: bool = True, ) -> int: install( - config_file, store, hook_types=hook_types, - overwrite=True, skip_on_missing_config=True, git_dir=directory, + config_file, + store, + hook_types=hook_types, + overwrite=True, + skip_on_missing_config=skip_on_missing_config, + git_dir=directory, ) try: _, out, _ = cmd_output('git', 'config', 'init.templateDir') diff --git a/pre_commit/main.py b/pre_commit/main.py index 874eb53a5..ffcc2e875 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -245,6 +245,12 @@ def main(argv: Optional[Sequence[str]] = None) -> int: init_templatedir_parser.add_argument( 'directory', help='The directory in which to write the hook script.', ) + init_templatedir_parser.add_argument( + '--no-allow-missing-config', + action='store_false', + dest='allow_missing_config', + help='Assume cloned repos should have a `pre-commit` config.', + ) _add_hook_type_option(init_templatedir_parser) install_parser = subparsers.add_parser( @@ -383,6 +389,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: return init_templatedir( args.config, store, args.directory, hook_types=args.hook_types, + skip_on_missing_config=args.allow_missing_config, ) elif args.command == 'install-hooks': return install_hooks(args.config, store) diff --git a/tests/commands/init_templatedir_test.py b/tests/commands/init_templatedir_test.py index d14a171f6..4e131dff7 100644 --- a/tests/commands/init_templatedir_test.py +++ b/tests/commands/init_templatedir_test.py @@ -1,6 +1,8 @@ import os.path from unittest import mock +import pytest + import pre_commit.constants as C from pre_commit.commands.init_templatedir import init_templatedir from pre_commit.envcontext import envcontext @@ -90,3 +92,49 @@ def test_init_templatedir_hookspath_set(tmpdir, tempdir_factory, store): C.CONFIG_FILE, store, target, hook_types=['pre-commit'], ) assert target.join('hooks/pre-commit').exists() + + +@pytest.mark.parametrize( + ('skip', 'commit_retcode', 'commit_output_snippet'), + ( + (True, 0, 'Skipping `pre-commit`.'), + (False, 1, f'No {C.CONFIG_FILE} file was found'), + ), +) +def test_init_templatedir_skip_on_missing_config( + tmpdir, + tempdir_factory, + store, + cap_out, + skip, + commit_retcode, + commit_output_snippet, +): + target = str(tmpdir.join('tmpl')) + init_git_dir = git_dir(tempdir_factory) + with cwd(init_git_dir): + cmd_output('git', 'config', 'init.templateDir', target) + init_templatedir( + C.CONFIG_FILE, + store, + target, + hook_types=['pre-commit'], + skip_on_missing_config=skip, + ) + + lines = cap_out.get().splitlines() + assert len(lines) == 1 + assert lines[0].startswith('pre-commit installed at') + + with envcontext((('GIT_TEMPLATE_DIR', target),)): + verify_git_dir = git_dir(tempdir_factory) + + with cwd(verify_git_dir): + retcode, output = git_commit( + fn=cmd_output_mocked_pre_commit_home, + tempdir_factory=tempdir_factory, + retcode=None, + ) + + assert retcode == commit_retcode + assert commit_output_snippet in output diff --git a/tests/main_test.py b/tests/main_test.py index c4724768c..f7abeeb4d 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -159,7 +159,28 @@ def test_try_repo(mock_store_dir): def test_init_templatedir(mock_store_dir): with mock.patch.object(main, 'init_templatedir') as patch: main.main(('init-templatedir', 'tdir')) + + assert patch.call_count == 1 + assert 'tdir' in patch.call_args[0] + assert patch.call_args[1]['hook_types'] == ['pre-commit'] + assert patch.call_args[1]['skip_on_missing_config'] is True + + +def test_init_templatedir_options(mock_store_dir): + args = ( + 'init-templatedir', + 'tdir', + '--hook-type', + 'commit-msg', + '--no-allow-missing-config', + ) + with mock.patch.object(main, 'init_templatedir') as patch: + main.main(args) + assert patch.call_count == 1 + assert 'tdir' in patch.call_args[0] + assert patch.call_args[1]['hook_types'] == ['commit-msg'] + assert patch.call_args[1]['skip_on_missing_config'] is False def test_help_cmd_in_empty_directory( From cee834bb5e643b80128e929dc9fb873e7d88c1e8 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 24 Jul 2020 15:56:35 -0700 Subject: [PATCH 009/129] better error handling when Store is readonly --- pre_commit/error_handler.py | 13 ++++++++++--- tests/error_handler_test.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pre_commit/error_handler.py b/pre_commit/error_handler.py index b2321ae0d..13d78cbbd 100644 --- a/pre_commit/error_handler.py +++ b/pre_commit/error_handler.py @@ -18,10 +18,17 @@ class FatalError(RuntimeError): def _log_and_exit(msg: str, exc: BaseException, formatted: str) -> None: error_msg = f'{msg}: {type(exc).__name__}: '.encode() + force_bytes(exc) output.write_line_b(error_msg) - log_path = os.path.join(Store().directory, 'pre-commit.log') - output.write_line(f'Check the log at {log_path}') - with open(log_path, 'wb') as log: + storedir = Store().directory + log_path = os.path.join(storedir, 'pre-commit.log') + with contextlib.ExitStack() as ctx: + if os.access(storedir, os.W_OK): + output.write_line(f'Check the log at {log_path}') + log = ctx.enter_context(open(log_path, 'wb')) + else: # pragma: win32 no cover + output.write_line(f'Failed to write to log at {log_path}') + log = sys.stdout.buffer + _log_line = functools.partial(output.write_line, stream=log) _log_line_b = functools.partial(output.write_line_b, stream=log) diff --git a/tests/error_handler_test.py b/tests/error_handler_test.py index 833bb8f83..d066e5728 100644 --- a/tests/error_handler_test.py +++ b/tests/error_handler_test.py @@ -1,13 +1,16 @@ import os.path import re +import stat import sys from unittest import mock import pytest from pre_commit import error_handler +from pre_commit.store import Store from pre_commit.util import CalledProcessError from testing.util import cmd_output_mocked_pre_commit_home +from testing.util import xfailif_windows @pytest.fixture @@ -168,3 +171,29 @@ def test_error_handler_no_tty(tempdir_factory): out_lines = out.splitlines() assert out_lines[-2] == 'An unexpected error has occurred: ValueError: ☃' assert out_lines[-1] == f'Check the log at {log_file}' + + +@xfailif_windows # pragma: win32 no cover +def test_error_handler_read_only_filesystem(mock_store_dir, cap_out, capsys): + # a better scenario would be if even the Store crash would be handled + # but realistically we're only targetting systems where the Store has + # already been set up + Store() + + write = (stat.S_IWGRP | stat.S_IWOTH | stat.S_IWUSR) + os.chmod(mock_store_dir, os.stat(mock_store_dir).st_mode & ~write) + + with pytest.raises(SystemExit): + with error_handler.error_handler(): + raise ValueError('ohai') + + output = cap_out.get() + assert output.startswith( + 'An unexpected error has occurred: ValueError: ohai\n' + 'Failed to write to log at ', + ) + + # our cap_out mock is imperfect so the rest of the output goes to capsys + out, _ = capsys.readouterr() + # the things that normally go to the log file will end up here + assert '### version information' in out From 68510596d31963c078bcec94e2b28b8b03b795c3 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 24 Jul 2020 15:30:36 -0700 Subject: [PATCH 010/129] warn on old list-style configuration --- pre_commit/clientlib.py | 45 +++++++++++++++++++++++++---------------- pre_commit/color.py | 10 +++++++++ pre_commit/main.py | 35 ++++++++++++-------------------- tests/clientlib_test.py | 9 ++++++++- 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 56ec0dd1b..8dfa9473e 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -12,8 +12,10 @@ from identify.identify import ALL_TAGS import pre_commit.constants as C +from pre_commit.color import add_color_option from pre_commit.error_handler import FatalError from pre_commit.languages.all import all_languages +from pre_commit.logging_handler import logging_handler from pre_commit.util import parse_version from pre_commit.util import yaml_load @@ -43,6 +45,7 @@ def _make_argparser(filenames_help: str) -> argparse.ArgumentParser: parser = argparse.ArgumentParser() parser.add_argument('filenames', nargs='*', help=filenames_help) parser.add_argument('-V', '--version', action='version', version=C.VERSION) + add_color_option(parser) return parser @@ -92,14 +95,16 @@ class InvalidManifestError(FatalError): def validate_manifest_main(argv: Optional[Sequence[str]] = None) -> int: parser = _make_argparser('Manifest filenames.') args = parser.parse_args(argv) - ret = 0 - for filename in args.filenames: - try: - load_manifest(filename) - except InvalidManifestError as e: - print(e) - ret = 1 - return ret + + with logging_handler(args.color): + ret = 0 + for filename in args.filenames: + try: + load_manifest(filename) + except InvalidManifestError as e: + print(e) + ret = 1 + return ret LOCAL = 'local' @@ -290,7 +295,11 @@ class InvalidConfigError(FatalError): def ordered_load_normalize_legacy_config(contents: str) -> Dict[str, Any]: data = yaml_load(contents) if isinstance(data, list): - # TODO: Once happy, issue a deprecation warning and instructions + logger.warning( + 'normalizing pre-commit configuration to a top-level map. ' + 'support for top level list will be removed in a future version. ' + 'run: `pre-commit migrate-config` to automatically fix this.', + ) return {'repos': data} else: return data @@ -307,11 +316,13 @@ def ordered_load_normalize_legacy_config(contents: str) -> Dict[str, Any]: def validate_config_main(argv: Optional[Sequence[str]] = None) -> int: parser = _make_argparser('Config filenames.') args = parser.parse_args(argv) - ret = 0 - for filename in args.filenames: - try: - load_config(filename) - except InvalidConfigError as e: - print(e) - ret = 1 - return ret + + with logging_handler(args.color): + ret = 0 + for filename in args.filenames: + try: + load_config(filename) + except InvalidConfigError as e: + print(e) + ret = 1 + return ret diff --git a/pre_commit/color.py b/pre_commit/color.py index eb906b78f..4ddfdf5b3 100644 --- a/pre_commit/color.py +++ b/pre_commit/color.py @@ -1,3 +1,4 @@ +import argparse import os import sys @@ -95,3 +96,12 @@ def use_color(setting: str) -> bool: os.getenv('TERM') != 'dumb' ) ) + + +def add_color_option(parser: argparse.ArgumentParser) -> None: + parser.add_argument( + '--color', default=os.environ.get('PRE_COMMIT_COLOR', 'auto'), + type=use_color, + metavar='{' + ','.join(COLOR_CHOICES) + '}', + help='Whether to use color in output. Defaults to `%(default)s`.', + ) diff --git a/pre_commit/main.py b/pre_commit/main.py index ffcc2e875..86479607c 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -8,8 +8,8 @@ from typing import Union import pre_commit.constants as C -from pre_commit import color from pre_commit import git +from pre_commit.color import add_color_option from pre_commit.commands.autoupdate import autoupdate from pre_commit.commands.clean import clean from pre_commit.commands.gc import gc @@ -41,15 +41,6 @@ COMMANDS_NO_GIT = {'clean', 'gc', 'init-templatedir', 'sample-config'} -def _add_color_option(parser: argparse.ArgumentParser) -> None: - parser.add_argument( - '--color', default=os.environ.get('PRE_COMMIT_COLOR', 'auto'), - type=color.use_color, - metavar='{' + ','.join(color.COLOR_CHOICES) + '}', - help='Whether to use color in output. Defaults to `%(default)s`.', - ) - - def _add_config_option(parser: argparse.ArgumentParser) -> None: parser.add_argument( '-c', '--config', default=C.CONFIG_FILE, @@ -195,7 +186,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: 'autoupdate', help="Auto-update pre-commit config to the latest repos' versions.", ) - _add_color_option(autoupdate_parser) + add_color_option(autoupdate_parser) _add_config_option(autoupdate_parser) autoupdate_parser.add_argument( '--bleeding-edge', action='store_true', @@ -216,11 +207,11 @@ def main(argv: Optional[Sequence[str]] = None) -> int: clean_parser = subparsers.add_parser( 'clean', help='Clean out pre-commit files.', ) - _add_color_option(clean_parser) + add_color_option(clean_parser) _add_config_option(clean_parser) hook_impl_parser = subparsers.add_parser('hook-impl') - _add_color_option(hook_impl_parser) + add_color_option(hook_impl_parser) _add_config_option(hook_impl_parser) hook_impl_parser.add_argument('--hook-type') hook_impl_parser.add_argument('--hook-dir') @@ -230,7 +221,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: hook_impl_parser.add_argument(dest='rest', nargs=argparse.REMAINDER) gc_parser = subparsers.add_parser('gc', help='Clean unused cached repos.') - _add_color_option(gc_parser) + add_color_option(gc_parser) _add_config_option(gc_parser) init_templatedir_parser = subparsers.add_parser( @@ -240,7 +231,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: '`git config init.templateDir`.' ), ) - _add_color_option(init_templatedir_parser) + add_color_option(init_templatedir_parser) _add_config_option(init_templatedir_parser) init_templatedir_parser.add_argument( 'directory', help='The directory in which to write the hook script.', @@ -256,7 +247,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: install_parser = subparsers.add_parser( 'install', help='Install the pre-commit script.', ) - _add_color_option(install_parser) + add_color_option(install_parser) _add_config_option(install_parser) install_parser.add_argument( '-f', '--overwrite', action='store_true', @@ -286,32 +277,32 @@ def main(argv: Optional[Sequence[str]] = None) -> int: 'useful.' ), ) - _add_color_option(install_hooks_parser) + add_color_option(install_hooks_parser) _add_config_option(install_hooks_parser) migrate_config_parser = subparsers.add_parser( 'migrate-config', help='Migrate list configuration to new map configuration.', ) - _add_color_option(migrate_config_parser) + add_color_option(migrate_config_parser) _add_config_option(migrate_config_parser) run_parser = subparsers.add_parser('run', help='Run hooks.') - _add_color_option(run_parser) + add_color_option(run_parser) _add_config_option(run_parser) _add_run_options(run_parser) sample_config_parser = subparsers.add_parser( 'sample-config', help=f'Produce a sample {C.CONFIG_FILE} file', ) - _add_color_option(sample_config_parser) + add_color_option(sample_config_parser) _add_config_option(sample_config_parser) try_repo_parser = subparsers.add_parser( 'try-repo', help='Try the hooks in a repository, useful for developing new hooks.', ) - _add_color_option(try_repo_parser) + add_color_option(try_repo_parser) _add_config_option(try_repo_parser) try_repo_parser.add_argument( 'repo', help='Repository to source hooks from.', @@ -328,7 +319,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: uninstall_parser = subparsers.add_parser( 'uninstall', help='Uninstall the pre-commit script.', ) - _add_color_option(uninstall_parser) + add_color_option(uninstall_parser) _add_config_option(uninstall_parser) _add_hook_type_option(uninstall_parser) diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index c48adbde9..2e2f738c9 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -30,6 +30,10 @@ def test_check_type_tag_failures(value): check_type_tag(value) +def test_check_type_tag_success(): + check_type_tag('file') + + @pytest.mark.parametrize( ('config_obj', 'expected'), ( ( @@ -110,15 +114,18 @@ def test_validate_config_main_ok(): assert not validate_config_main(('.pre-commit-config.yaml',)) -def test_validate_config_old_list_format_ok(tmpdir): +def test_validate_config_old_list_format_ok(tmpdir, cap_out): f = tmpdir.join('cfg.yaml') f.write('- {repo: meta, hooks: [{id: identity}]}') assert not validate_config_main((f.strpath,)) + start = '[WARNING] normalizing pre-commit configuration to a top-level map' + assert cap_out.get().startswith(start) def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog): f = tmpdir.join('cfg.yaml') f.write( + 'repos:\n' '- repo: https://gitlab.com/pycqa/flake8\n' ' rev: 3.7.7\n' ' hooks:\n' From 4063730925f19c860c2f402bf86b733ba97c2630 Mon Sep 17 00:00:00 2001 From: Johan Henkens Date: Fri, 21 Aug 2020 20:40:59 -0700 Subject: [PATCH 011/129] Save diff between hook executions --- pre_commit/commands/run.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 567b7cd3b..1f28c8c74 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -134,9 +134,10 @@ def _run_single_hook( hook: Hook, skips: Set[str], cols: int, + diff_before: bytes, verbose: bool, use_color: bool, -) -> bool: +) -> Tuple[bool, bytes]: filenames = classifier.filenames_for_hook(hook) if hook.id in skips or hook.alias in skips: @@ -151,6 +152,7 @@ def _run_single_hook( ) duration = None retcode = 0 + diff_after = diff_before files_modified = False out = b'' elif not filenames and not hook.always_run: @@ -166,21 +168,20 @@ def _run_single_hook( ) duration = None retcode = 0 + diff_after = diff_before files_modified = False out = b'' else: # print hook and dots first in case the hook takes a while to run output.write(_start_msg(start=hook.name, end_len=6, cols=cols)) - diff_cmd = ('git', 'diff', '--no-ext-diff') - diff_before = cmd_output_b(*diff_cmd, retcode=None) if not hook.pass_filenames: filenames = () time_before = time.time() language = languages[hook.language] retcode, out = language.run_hook(hook, filenames, use_color) duration = round(time.time() - time_before, 2) or 0 - diff_after = cmd_output_b(*diff_cmd, retcode=None) + diff_after = _get_diff() # if the hook makes changes, fail the commit files_modified = diff_before != diff_after @@ -212,7 +213,7 @@ def _run_single_hook( output.write_line_b(out.strip(), logfile_name=hook.log_file) output.write_line() - return files_modified or bool(retcode) + return files_modified or bool(retcode), diff_after def _compute_cols(hooks: Sequence[Hook]) -> int: @@ -248,6 +249,11 @@ def _all_filenames(args: argparse.Namespace) -> Collection[str]: return git.get_staged_files() +def _get_diff() -> bytes: + _, out, _ = cmd_output_b('git', 'diff', '--no-ext-diff', retcode=None) + return out + + def _run_hooks( config: Dict[str, Any], hooks: Sequence[Hook], @@ -261,14 +267,16 @@ def _run_hooks( _all_filenames(args), config['files'], config['exclude'], ) retval = 0 + prior_diff = _get_diff() for hook in hooks: - retval |= _run_single_hook( - classifier, hook, skips, cols, + current_retval, prior_diff = _run_single_hook( + classifier, hook, skips, cols, prior_diff, verbose=args.verbose, use_color=args.color, ) + retval |= current_retval if retval and config['fail_fast']: break - if retval and args.show_diff_on_failure and git.has_diff(): + if retval and args.show_diff_on_failure and prior_diff: if args.all_files: output.write_line( 'pre-commit hook(s) made changes.\n' From bf33f4c91c2e73bac36ec37a3dcf92bef8f0492c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 21 Aug 2020 23:11:30 -0700 Subject: [PATCH 012/129] allow pre-commit to succeed on a readonly store directory --- pre_commit/store.py | 6 ++++++ tests/store_test.py | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/pre_commit/store.py b/pre_commit/store.py index 6d8c40a93..809a6f4dc 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -43,6 +43,10 @@ class Store: def __init__(self, directory: Optional[str] = None) -> None: self.directory = directory or Store.get_default_directory() self.db_path = os.path.join(self.directory, 'db.db') + self.readonly = ( + os.path.exists(self.directory) and + not os.access(self.directory, os.W_OK) + ) if not os.path.exists(self.directory): os.makedirs(self.directory, exist_ok=True) @@ -218,6 +222,8 @@ def _create_config_table(self, db: sqlite3.Connection) -> None: ) def mark_config_used(self, path: str) -> None: + if self.readonly: # pragma: win32 no cover + return path = os.path.realpath(path) # don't insert config files that do not exist if not os.path.exists(path): diff --git a/tests/store_test.py b/tests/store_test.py index 6a4e900c9..0947144ed 100644 --- a/tests/store_test.py +++ b/tests/store_test.py @@ -1,5 +1,6 @@ import os.path import sqlite3 +import stat from unittest import mock import pytest @@ -12,6 +13,7 @@ from testing.fixtures import git_dir from testing.util import cwd from testing.util import git_commit +from testing.util import xfailif_windows def test_our_session_fixture_works(): @@ -217,3 +219,27 @@ def test_select_all_configs_roll_forward(store): def test_mark_config_as_used_roll_forward(store, tmpdir): _simulate_pre_1_14_0(store) test_mark_config_as_used(store, tmpdir) + + +@xfailif_windows # pragma: win32 no cover +def test_mark_config_as_used_readonly(tmpdir): + cfg = tmpdir.join('f').ensure() + store_dir = tmpdir.join('store') + # make a store, then we'll convert its directory to be readonly + assert not Store(str(store_dir)).readonly # directory didn't exist + assert not Store(str(store_dir)).readonly # directory did exist + + def _chmod_minus_w(p): + st = os.stat(p) + os.chmod(p, st.st_mode & ~(stat.S_IWUSR | stat.S_IWOTH | stat.S_IWGRP)) + + _chmod_minus_w(store_dir) + for fname in os.listdir(store_dir): + assert not os.path.isdir(fname) + _chmod_minus_w(os.path.join(store_dir, fname)) + + store = Store(str(store_dir)) + assert store.readonly + # should be skipped due to readonly + store.mark_config_used(str(cfg)) + assert store.select_all_configs() == [] From f1de792877f904b7349d3ae163a3694f2854ade1 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 22 Aug 2020 13:31:12 -0700 Subject: [PATCH 013/129] v2.7.0 --- CHANGELOG.md | 23 +++++++++++++++++++++++ setup.cfg | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c487acf6d..e692f3dce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +2.7.0 - 2020-08-22 +================== + +### Features +- Produce error message if an environment is immediately unhealthy + - #1535 PR by @asottile. +- Add --no-allow-missing-config option to init-templatedir + - #1539 PR by @singergr. +- Add warning for old list-style configuration + - #1544 PR by @asottile. +- Allow pre-commit to succeed on a readonly store. + - #1570 PR by @asottile. + - #1536 issue by @asottile. + +### Fixes +- Fix error messaging when the store directory is readonly + - #1546 PR by @asottile. + - #1536 issue by @asottile. +- Improve `diff` performance with many hooks + - #1566 PR by @jhenkens. + - #1564 issue by @jhenkens. + + 2.6.0 - 2020-07-01 ================== diff --git a/setup.cfg b/setup.cfg index 0ce58b1a2..c9d7f82e7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.6.0 +version = 2.7.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From eb8b48aeb439ee69610a7c08a3a1de75fbbfe572 Mon Sep 17 00:00:00 2001 From: Ruairidh MacLeod Date: Sun, 23 Aug 2020 00:14:10 +0000 Subject: [PATCH 014/129] remove docker_is_running check from source Moved to testing.util so it can be used for the skipif_cant_run_docker test hooks. --- pre_commit/languages/docker.py | 19 ------------------- pre_commit/languages/docker_image.py | 2 -- testing/util.py | 12 +++++++++++- tests/languages/docker_test.py | 9 --------- 4 files changed, 11 insertions(+), 31 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index 4091492cc..9c1311988 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -7,9 +7,7 @@ from pre_commit.hook import Hook from pre_commit.languages import helpers from pre_commit.prefix import Prefix -from pre_commit.util import CalledProcessError from pre_commit.util import clean_path_on_failure -from pre_commit.util import cmd_output_b ENVIRONMENT_DIR = 'docker' PRE_COMMIT_LABEL = 'PRE_COMMIT' @@ -26,21 +24,6 @@ def docker_tag(prefix: Prefix) -> str: # pragma: win32 no cover return f'pre-commit-{md5sum}' -def docker_is_running() -> bool: # pragma: win32 no cover - try: - cmd_output_b('docker', 'ps') - except CalledProcessError: - return False - else: - return True - - -def assert_docker_available() -> None: # pragma: win32 no cover - assert docker_is_running(), ( - 'Docker is either not running or not configured in this environment' - ) - - def build_docker_image( prefix: Prefix, *, @@ -63,7 +46,6 @@ def install_environment( ) -> None: # pragma: win32 no cover helpers.assert_version_default('docker', version) helpers.assert_no_additional_deps('docker', additional_dependencies) - assert_docker_available() directory = prefix.path( helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT), @@ -101,7 +83,6 @@ def run_hook( file_args: Sequence[str], color: bool, ) -> Tuple[int, bytes]: # pragma: win32 no cover - assert_docker_available() # Rebuild the docker image in case it has gone missing, as many people do # automated cleanup of docker images. build_docker_image(hook.prefix, pull=False) diff --git a/pre_commit/languages/docker_image.py b/pre_commit/languages/docker_image.py index 0c51df628..311d1277d 100644 --- a/pre_commit/languages/docker_image.py +++ b/pre_commit/languages/docker_image.py @@ -3,7 +3,6 @@ from pre_commit.hook import Hook from pre_commit.languages import helpers -from pre_commit.languages.docker import assert_docker_available from pre_commit.languages.docker import docker_cmd ENVIRONMENT_DIR = None @@ -17,6 +16,5 @@ def run_hook( file_args: Sequence[str], color: bool, ) -> Tuple[int, bytes]: # pragma: win32 no cover - assert_docker_available() cmd = docker_cmd() + hook.cmd return helpers.run_xargs(hook, cmd, file_args, color=color) diff --git a/testing/util.py b/testing/util.py index 4edb7a9ec..f556a8dd9 100644 --- a/testing/util.py +++ b/testing/util.py @@ -5,14 +5,24 @@ import pytest from pre_commit import parse_shebang -from pre_commit.languages.docker import docker_is_running +from pre_commit.util import CalledProcessError from pre_commit.util import cmd_output +from pre_commit.util import cmd_output_b from testing.auto_namedtuple import auto_namedtuple TESTING_DIR = os.path.abspath(os.path.dirname(__file__)) +def docker_is_running() -> bool: # pragma: win32 no cover + try: + cmd_output_b('docker', 'ps') + except CalledProcessError: # pragma: no cover + return False + else: + return True + + def get_resource_path(path): return os.path.join(TESTING_DIR, 'resources', path) diff --git a/tests/languages/docker_test.py b/tests/languages/docker_test.py index b65b2235a..3bed4bfa5 100644 --- a/tests/languages/docker_test.py +++ b/tests/languages/docker_test.py @@ -1,15 +1,6 @@ from unittest import mock from pre_commit.languages import docker -from pre_commit.util import CalledProcessError - - -def test_docker_is_running_process_error(): - with mock.patch( - 'pre_commit.languages.docker.cmd_output_b', - side_effect=CalledProcessError(1, (), 0, b'', None), - ): - assert docker.docker_is_running() is False def test_docker_fallback_user(): From b63b37ac36caf89de55a7ae45bb57d981b1b1e36 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 23 Aug 2020 09:55:29 -0700 Subject: [PATCH 015/129] fix cache of invalidated unhealthy environment version info --- pre_commit/languages/python.py | 3 ++- tests/languages/python_test.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index 6f7c90055..7a685808e 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -191,7 +191,8 @@ def healthy(prefix: Prefix, language_version: str) -> bool: return ( 'version_info' in cfg and - _version_info(py_exe) == cfg['version_info'] and ( + # always use uncached lookup here in case we replaced an unhealthy env + _version_info.__wrapped__(py_exe) == cfg['version_info'] and ( 'base-executable' not in cfg or _version_info(cfg['base-executable']) == cfg['version_info'] ) diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index c419ad621..29c5a9bf2 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -8,6 +8,7 @@ from pre_commit.envcontext import envcontext from pre_commit.languages import python from pre_commit.prefix import Prefix +from pre_commit.util import make_executable def test_read_pyvenv_cfg(tmpdir): @@ -141,3 +142,26 @@ def test_unhealthy_old_virtualenv(python_dir): os.remove(prefix.path('py_env-default/pyvenv.cfg')) assert python.healthy(prefix, C.DEFAULT) is False + + +def test_unhealthy_then_replaced(python_dir): + prefix, tmpdir = python_dir + + python.install_environment(prefix, C.DEFAULT, ()) + + # simulate an exe which returns an old version + exe_name = 'python.exe' if sys.platform == 'win32' else 'python' + py_exe = prefix.path(python.bin_dir('py_env-default'), exe_name) + os.rename(py_exe, f'{py_exe}.tmp') + + with open(py_exe, 'w') as f: + f.write('#!/usr/bin/env bash\necho 1.2.3\n') + make_executable(py_exe) + + # should be unhealthy due to version mismatch + assert python.healthy(prefix, C.DEFAULT) is False + + # now put the exe back and it should be healthy again + os.replace(f'{py_exe}.tmp', py_exe) + + assert python.healthy(prefix, C.DEFAULT) is True From 79b098c409460166d810c51a3048ba427a0e9e80 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 23 Aug 2020 10:18:59 -0700 Subject: [PATCH 016/129] fix atomic file replace on windows --- pre_commit/commands/install_uninstall.py | 2 +- pre_commit/repository.py | 2 +- pre_commit/store.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pre_commit/commands/install_uninstall.py b/pre_commit/commands/install_uninstall.py index c8b7633b6..85fa53cbb 100644 --- a/pre_commit/commands/install_uninstall.py +++ b/pre_commit/commands/install_uninstall.py @@ -165,7 +165,7 @@ def _uninstall_hook_script(hook_type: str) -> None: output.write_line(f'{hook_type} uninstalled') if os.path.exists(legacy_path): - os.rename(legacy_path, hook_path) + os.replace(legacy_path, hook_path) output.write_line(f'Restored previous hooks to {hook_path}') diff --git a/pre_commit/repository.py b/pre_commit/repository.py index 91c430555..46e96c1dc 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -48,7 +48,7 @@ def _write_state(prefix: Prefix, venv: str, state: object) -> None: with open(staging, 'w') as state_file: state_file.write(json.dumps(state)) # Move the file into place atomically to indicate we've installed - os.rename(staging, state_filename) + os.replace(staging, state_filename) def _hook_installed(hook: Hook) -> bool: diff --git a/pre_commit/store.py b/pre_commit/store.py index 809a6f4dc..e5522ec33 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -79,7 +79,7 @@ def __init__(self, directory: Optional[str] = None) -> None: self._create_config_table(db) # Atomic file move - os.rename(tmpfile, self.db_path) + os.replace(tmpfile, self.db_path) @contextlib.contextmanager def exclusive_lock(self) -> Generator[None, None, None]: From f511afe40e3f0ea7474d37f19c69741d3e167876 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 23 Aug 2020 10:53:21 -0700 Subject: [PATCH 017/129] v2.7.1 --- CHANGELOG.md | 14 ++++++++++++++ setup.cfg | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e692f3dce..a92a6b36c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +2.7.1 - 2020-08-23 +================== + +### Fixes +- Improve performance of docker hooks by removing slow `ps` call + - #1572 PR by @rkm. + - #1569 issue by @asottile. +- Fix un-`healthy()` invalidation followed by install being reported as + un-`healthy()`. + - #1576 PR by @asottile. + - #1575 issue by @jab. +- Fix rare file race condition on windows with `os.replace()` + - #1577 PR by @asottile. + 2.7.0 - 2020-08-22 ================== diff --git a/setup.cfg b/setup.cfg index c9d7f82e7..4153d7650 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.7.0 +version = 2.7.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From b149c7a344a407fb3c9c8c99b9647c3c95f1a998 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 7 Sep 2020 13:23:02 -0700 Subject: [PATCH 018/129] fix for node healthy() when system executable moves --- pre_commit/languages/node.py | 7 ++++++- tests/languages/node_test.py | 37 ++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index d99e6f2c7..dccbb7ca2 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -21,7 +21,6 @@ from pre_commit.util import cmd_output_b ENVIRONMENT_DIR = 'node_env' -healthy = helpers.basic_healthy @functools.lru_cache(maxsize=1) @@ -73,6 +72,12 @@ def in_env( yield +def healthy(prefix: Prefix, language_version: str) -> bool: + with in_env(prefix, language_version): + retcode, _, _ = cmd_output_b('node', '--version', retcode=None) + return retcode == 0 + + def install_environment( prefix: Prefix, version: str, additional_dependencies: Sequence[str], ) -> None: diff --git a/tests/languages/node_test.py b/tests/languages/node_test.py index fd300469a..c8e2d47d1 100644 --- a/tests/languages/node_test.py +++ b/tests/languages/node_test.py @@ -1,14 +1,19 @@ +import os +import shutil import sys from unittest import mock import pytest import pre_commit.constants as C +from pre_commit import envcontext from pre_commit import parse_shebang -from pre_commit.languages.node import get_default_version +from pre_commit.languages import node +from pre_commit.prefix import Prefix +from testing.util import xfailif_windows -ACTUAL_GET_DEFAULT_VERSION = get_default_version.__wrapped__ +ACTUAL_GET_DEFAULT_VERSION = node.get_default_version.__wrapped__ @pytest.fixture @@ -45,3 +50,31 @@ def test_uses_default_when_node_and_npm_are_not_available(find_exe_mck): def test_sets_default_on_windows(find_exe_mck): find_exe_mck.return_value = '/path/to/exe' assert ACTUAL_GET_DEFAULT_VERSION() == C.DEFAULT + + +@xfailif_windows # pragma: win32 no cover +def test_healthy_system_node(tmpdir): + tmpdir.join('package.json').write('{"name": "t", "version": "1.0.0"}') + + prefix = Prefix(str(tmpdir)) + node.install_environment(prefix, 'system', ()) + assert node.healthy(prefix, 'system') + + +@xfailif_windows # pragma: win32 no cover +def test_unhealthy_if_system_node_goes_missing(tmpdir): + bin_dir = tmpdir.join('bin').ensure_dir() + node_bin = bin_dir.join('node') + node_bin.mksymlinkto(shutil.which('node')) + + prefix_dir = tmpdir.join('prefix').ensure_dir() + prefix_dir.join('package.json').write('{"name": "t", "version": "1.0.0"}') + + path = ('PATH', (str(bin_dir), os.pathsep, envcontext.Var('PATH'))) + with envcontext.envcontext((path,)): + prefix = Prefix(str(prefix_dir)) + node.install_environment(prefix, 'system', ()) + assert node.healthy(prefix, 'system') + + node_bin.remove() + assert not node.healthy(prefix, 'system') From 3a0406847b16e0f8950f90f894a6fce5dcd72813 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 7 Sep 2020 15:01:50 -0700 Subject: [PATCH 019/129] fix excess whitespace in traceback in error --- pre_commit/error_handler.py | 2 +- requirements-dev.txt | 1 + tests/commands/install_uninstall_test.py | 50 ++++++++++++------------ tests/commands/try_repo_test.py | 14 ++++--- tests/error_handler_test.py | 34 +++++++++------- tests/repository_test.py | 6 +-- 6 files changed, 59 insertions(+), 48 deletions(-) diff --git a/pre_commit/error_handler.py b/pre_commit/error_handler.py index 13d78cbbd..009f6d9c2 100644 --- a/pre_commit/error_handler.py +++ b/pre_commit/error_handler.py @@ -52,7 +52,7 @@ def _log_and_exit(msg: str, exc: BaseException, formatted: str) -> None: _log_line('```') _log_line() _log_line('```') - _log_line(formatted) + _log_line(formatted.rstrip()) _log_line('```') raise SystemExit(1) diff --git a/requirements-dev.txt b/requirements-dev.txt index d6a13dc43..14ada96ed 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,3 +2,4 @@ covdefaults coverage pytest pytest-env +re-assert diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py index 5809a3f27..481a7279d 100644 --- a/tests/commands/install_uninstall_test.py +++ b/tests/commands/install_uninstall_test.py @@ -3,6 +3,8 @@ import sys from unittest import mock +import re_assert + import pre_commit.constants as C from pre_commit import git from pre_commit.commands import install_uninstall @@ -143,7 +145,7 @@ def _get_commit_output(tempdir_factory, touch_file='foo', **kwargs): ) -NORMAL_PRE_COMMIT_RUN = re.compile( +NORMAL_PRE_COMMIT_RUN = re_assert.Matches( fr'^\[INFO\] Initializing environment for .+\.\n' fr'Bash hook\.+Passed\n' fr'\[master [a-f0-9]{{7}}\] commit!\n' @@ -159,7 +161,7 @@ def test_install_pre_commit_and_run(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_install_pre_commit_and_run_custom_path(tempdir_factory, store): @@ -171,7 +173,7 @@ def test_install_pre_commit_and_run_custom_path(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_install_in_submodule_and_run(tempdir_factory, store): @@ -185,7 +187,7 @@ def test_install_in_submodule_and_run(tempdir_factory, store): assert install(C.CONFIG_FILE, store, hook_types=['pre-commit']) == 0 ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_install_in_worktree_and_run(tempdir_factory, store): @@ -198,7 +200,7 @@ def test_install_in_worktree_and_run(tempdir_factory, store): assert install(C.CONFIG_FILE, store, hook_types=['pre-commit']) == 0 ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_commit_am(tempdir_factory, store): @@ -243,7 +245,7 @@ def test_install_idempotent(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def _path_without_us(): @@ -297,7 +299,7 @@ def test_environment_not_sourced(tempdir_factory, store): ) -FAILING_PRE_COMMIT_RUN = re.compile( +FAILING_PRE_COMMIT_RUN = re_assert.Matches( r'^\[INFO\] Initializing environment for .+\.\n' r'Failing hook\.+Failed\n' r'- hook id: failing_hook\n' @@ -316,10 +318,10 @@ def test_failing_hooks_returns_nonzero(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 1 - assert FAILING_PRE_COMMIT_RUN.match(output) + FAILING_PRE_COMMIT_RUN.assert_matches(output) -EXISTING_COMMIT_RUN = re.compile( +EXISTING_COMMIT_RUN = re_assert.Matches( fr'^legacy hook\n' fr'\[master [a-f0-9]{{7}}\] commit!\n' fr'{FILES_CHANGED}' @@ -342,7 +344,7 @@ def test_install_existing_hooks_no_overwrite(tempdir_factory, store): # Make sure we installed the "old" hook correctly ret, output = _get_commit_output(tempdir_factory, touch_file='baz') assert ret == 0 - assert EXISTING_COMMIT_RUN.match(output) + EXISTING_COMMIT_RUN.assert_matches(output) # Now install pre-commit (no-overwrite) assert install(C.CONFIG_FILE, store, hook_types=['pre-commit']) == 0 @@ -351,7 +353,7 @@ def test_install_existing_hooks_no_overwrite(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 assert output.startswith('legacy hook\n') - assert NORMAL_PRE_COMMIT_RUN.match(output[len('legacy hook\n'):]) + NORMAL_PRE_COMMIT_RUN.assert_matches(output[len('legacy hook\n'):]) def test_legacy_overwriting_legacy_hook(tempdir_factory, store): @@ -377,10 +379,10 @@ def test_install_existing_hook_no_overwrite_idempotent(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 assert output.startswith('legacy hook\n') - assert NORMAL_PRE_COMMIT_RUN.match(output[len('legacy hook\n'):]) + NORMAL_PRE_COMMIT_RUN.assert_matches(output[len('legacy hook\n'):]) -FAIL_OLD_HOOK = re.compile( +FAIL_OLD_HOOK = re_assert.Matches( r'fail!\n' r'\[INFO\] Initializing environment for .+\.\n' r'Bash hook\.+Passed\n', @@ -401,7 +403,7 @@ def test_failing_existing_hook_returns_1(tempdir_factory, store): # We should get a failure from the legacy hook ret, output = _get_commit_output(tempdir_factory) assert ret == 1 - assert FAIL_OLD_HOOK.match(output) + FAIL_OLD_HOOK.assert_matches(output) def test_install_overwrite_no_existing_hooks(tempdir_factory, store): @@ -413,7 +415,7 @@ def test_install_overwrite_no_existing_hooks(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_install_overwrite(tempdir_factory, store): @@ -426,7 +428,7 @@ def test_install_overwrite(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_uninstall_restores_legacy_hooks(tempdir_factory, store): @@ -441,7 +443,7 @@ def test_uninstall_restores_legacy_hooks(tempdir_factory, store): # Make sure we installed the "old" hook correctly ret, output = _get_commit_output(tempdir_factory, touch_file='baz') assert ret == 0 - assert EXISTING_COMMIT_RUN.match(output) + EXISTING_COMMIT_RUN.assert_matches(output) def test_replace_old_commit_script(tempdir_factory, store): @@ -463,7 +465,7 @@ def test_replace_old_commit_script(tempdir_factory, store): ret, output = _get_commit_output(tempdir_factory) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def test_uninstall_doesnt_remove_not_our_hooks(in_git_dir): @@ -476,7 +478,7 @@ def test_uninstall_doesnt_remove_not_our_hooks(in_git_dir): assert pre_commit.exists() -PRE_INSTALLED = re.compile( +PRE_INSTALLED = re_assert.Matches( fr'Bash hook\.+Passed\n' fr'\[master [a-f0-9]{{7}}\] commit!\n' fr'{FILES_CHANGED}' @@ -493,7 +495,7 @@ def test_installs_hooks_with_hooks_True(tempdir_factory, store): ) assert ret == 0 - assert PRE_INSTALLED.match(output) + PRE_INSTALLED.assert_matches(output) def test_install_hooks_command(tempdir_factory, store): @@ -506,7 +508,7 @@ def test_install_hooks_command(tempdir_factory, store): ) assert ret == 0 - assert PRE_INSTALLED.match(output) + PRE_INSTALLED.assert_matches(output) def test_installed_from_venv(tempdir_factory, store): @@ -533,7 +535,7 @@ def test_installed_from_venv(tempdir_factory, store): }, ) assert ret == 0 - assert NORMAL_PRE_COMMIT_RUN.match(output) + NORMAL_PRE_COMMIT_RUN.assert_matches(output) def _get_push_output(tempdir_factory, remote='origin', opts=()): @@ -880,7 +882,7 @@ def test_prepare_commit_msg_legacy( def test_pre_merge_commit_integration(tempdir_factory, store): - expected = re.compile( + output_pattern = re_assert.Matches( r'^\[INFO\] Initializing environment for .+\n' r'Bash hook\.+Passed\n' r"Merge made by the 'recursive' strategy.\n" @@ -902,7 +904,7 @@ def test_pre_merge_commit_integration(tempdir_factory, store): tempdir_factory=tempdir_factory, ) assert ret == 0 - assert expected.match(output) + output_pattern.assert_matches(output) def test_install_disallow_missing_config(tempdir_factory, store): diff --git a/tests/commands/try_repo_test.py b/tests/commands/try_repo_test.py index d3ec3fda2..a157d1636 100644 --- a/tests/commands/try_repo_test.py +++ b/tests/commands/try_repo_test.py @@ -3,6 +3,8 @@ import time from unittest import mock +import re_assert + from pre_commit import git from pre_commit.commands.try_repo import try_repo from pre_commit.util import cmd_output @@ -43,7 +45,7 @@ def test_try_repo_repo_only(cap_out, tempdir_factory): _run_try_repo(tempdir_factory, verbose=True) start, config, rest = _get_out(cap_out) assert start == '' - assert re.match( + config_pattern = re_assert.Matches( '^repos:\n' '- repo: .+\n' ' rev: .+\n' @@ -51,8 +53,8 @@ def test_try_repo_repo_only(cap_out, tempdir_factory): ' - id: bash_hook\n' ' - id: bash_hook2\n' ' - id: bash_hook3\n$', - config, ) + config_pattern.assert_matches(config) assert rest == '''\ Bash hook............................................(no files to check)Skipped - hook id: bash_hook @@ -71,14 +73,14 @@ def test_try_repo_with_specific_hook(cap_out, tempdir_factory): _run_try_repo(tempdir_factory, hook='bash_hook', verbose=True) start, config, rest = _get_out(cap_out) assert start == '' - assert re.match( + config_pattern = re_assert.Matches( '^repos:\n' '- repo: .+\n' ' rev: .+\n' ' hooks:\n' ' - id: bash_hook\n$', - config, ) + config_pattern.assert_matches(config) assert rest == '''\ Bash hook............................................(no files to check)Skipped - hook id: bash_hook @@ -128,14 +130,14 @@ def test_try_repo_uncommitted_changes(cap_out, tempdir_factory): start, config, rest = _get_out(cap_out) assert start == '[WARNING] Creating temporary repo with uncommitted changes...\n' # noqa: E501 - assert re.match( + config_pattern = re_assert.Matches( '^repos:\n' '- repo: .+shadow-repo\n' ' rev: .+\n' ' hooks:\n' ' - id: bash_hook\n$', - config, ) + config_pattern.assert_matches(config) assert rest == 'modified name!...........................................................Passed\n' # noqa: E501 diff --git a/tests/error_handler_test.py b/tests/error_handler_test.py index d066e5728..5dc085059 100644 --- a/tests/error_handler_test.py +++ b/tests/error_handler_test.py @@ -1,10 +1,10 @@ import os.path -import re import stat import sys from unittest import mock import pytest +import re_assert from pre_commit import error_handler from pre_commit.store import Store @@ -37,7 +37,7 @@ def test_error_handler_fatal_error(mocked_log_and_exit): mock.ANY, ) - assert re.match( + pattern = re_assert.Matches( r'Traceback \(most recent call last\):\n' r' File ".+pre_commit.error_handler.py", line \d+, in error_handler\n' r' yield\n' @@ -45,8 +45,8 @@ def test_error_handler_fatal_error(mocked_log_and_exit): r'in test_error_handler_fatal_error\n' r' raise exc\n' r'(pre_commit\.error_handler\.)?FatalError: just a test\n', - mocked_log_and_exit.call_args[0][2], ) + pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) def test_error_handler_uncaught_error(mocked_log_and_exit): @@ -60,7 +60,7 @@ def test_error_handler_uncaught_error(mocked_log_and_exit): # Tested below mock.ANY, ) - assert re.match( + pattern = re_assert.Matches( r'Traceback \(most recent call last\):\n' r' File ".+pre_commit.error_handler.py", line \d+, in error_handler\n' r' yield\n' @@ -68,8 +68,8 @@ def test_error_handler_uncaught_error(mocked_log_and_exit): r'in test_error_handler_uncaught_error\n' r' raise exc\n' r'ValueError: another test\n', - mocked_log_and_exit.call_args[0][2], ) + pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) def test_error_handler_keyboardinterrupt(mocked_log_and_exit): @@ -83,7 +83,7 @@ def test_error_handler_keyboardinterrupt(mocked_log_and_exit): # Tested below mock.ANY, ) - assert re.match( + pattern = re_assert.Matches( r'Traceback \(most recent call last\):\n' r' File ".+pre_commit.error_handler.py", line \d+, in error_handler\n' r' yield\n' @@ -91,15 +91,19 @@ def test_error_handler_keyboardinterrupt(mocked_log_and_exit): r'in test_error_handler_keyboardinterrupt\n' r' raise exc\n' r'KeyboardInterrupt\n', - mocked_log_and_exit.call_args[0][2], ) + pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) def test_log_and_exit(cap_out, mock_store_dir): + tb = ( + 'Traceback (most recent call last):\n' + ' File "", line 2, in \n' + 'pre_commit.error_handler.FatalError: hai\n' + ) + with pytest.raises(SystemExit): - error_handler._log_and_exit( - 'msg', error_handler.FatalError('hai'), "I'm a stacktrace", - ) + error_handler._log_and_exit('msg', error_handler.FatalError('hai'), tb) printed = cap_out.get() log_file = os.path.join(mock_store_dir, 'pre-commit.log') @@ -108,7 +112,7 @@ def test_log_and_exit(cap_out, mock_store_dir): assert os.path.exists(log_file) with open(log_file) as f: logged = f.read() - expected = ( + pattern = re_assert.Matches( r'^### version information\n' r'\n' r'```\n' @@ -127,10 +131,12 @@ def test_log_and_exit(cap_out, mock_store_dir): r'```\n' r'\n' r'```\n' - r"I'm a stacktrace\n" - r'```\n' + r'Traceback \(most recent call last\):\n' + r' File "", line 2, in \n' + r'pre_commit\.error_handler\.FatalError: hai\n' + r'```\n', ) - assert re.match(expected, logged) + pattern.assert_matches(logged) def test_error_handler_non_ascii_exception(mock_store_dir): diff --git a/tests/repository_test.py b/tests/repository_test.py index 84e4da930..035b02a65 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -1,5 +1,4 @@ import os.path -import re import shutil import sys from typing import Any @@ -8,6 +7,7 @@ import cfgv import pytest +import re_assert import pre_commit.constants as C from pre_commit.clientlib import CONFIG_SCHEMA @@ -843,12 +843,12 @@ def test_too_new_version(tempdir_factory, store, fake_log_handler): with pytest.raises(SystemExit): _get_hook(config, store, 'bash_hook') msg = fake_log_handler.handle.call_args[0][0].msg - assert re.match( + pattern = re_assert.Matches( r'^The hook `bash_hook` requires pre-commit version 999\.0\.0 but ' r'version \d+\.\d+\.\d+ is installed. ' r'Perhaps run `pip install --upgrade pre-commit`\.$', - msg, ) + pattern.assert_matches(msg) @pytest.mark.parametrize('version', ('0.1.0', C.VERSION)) From 273326b89b3eb17656a46f63f094fd1c0a55af84 Mon Sep 17 00:00:00 2001 From: Celeborn2BeAlive Date: Wed, 9 Sep 2020 09:32:44 +0200 Subject: [PATCH 020/129] drop python.exe extension on windows on shebang --- pre_commit/commands/install_uninstall.py | 2 +- tests/commands/install_uninstall_test.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/install_uninstall.py b/pre_commit/commands/install_uninstall.py index 85fa53cbb..684b59805 100644 --- a/pre_commit/commands/install_uninstall.py +++ b/pre_commit/commands/install_uninstall.py @@ -55,7 +55,7 @@ def is_our_script(filename: str) -> bool: def shebang() -> str: if sys.platform == 'win32': - py = SYS_EXE + py, _ = os.path.splitext(SYS_EXE) else: exe_choices = [ f'python{sys.version_info[0]}.{sys.version_info[1]}', diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py index 481a7279d..7a4b90635 100644 --- a/tests/commands/install_uninstall_test.py +++ b/tests/commands/install_uninstall_test.py @@ -56,8 +56,13 @@ def patch_sys_exe(exe): def test_shebang_windows(): + with patch_platform('win32'), patch_sys_exe('python'): + assert shebang() == '#!/usr/bin/env python' + + +def test_shebang_windows_drop_ext(): with patch_platform('win32'), patch_sys_exe('python.exe'): - assert shebang() == '#!/usr/bin/env python.exe' + assert shebang() == '#!/usr/bin/env python' def test_shebang_posix_not_on_path(): From 48886449907f4db13a8f1994340c9948623cd832 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 15 Sep 2020 12:04:25 -0700 Subject: [PATCH 021/129] remove hardcoded python location --- pre_commit/languages/python.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index 7a685808e..afa093d56 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -114,11 +114,6 @@ def get_default_version() -> str: # pragma: no cover (platform dependent) if _find_by_py_launcher(exe): return exe - # Give a best-effort try for windows - default_folder_name = exe.replace('.', '') - if os.path.exists(fr'C:\{default_folder_name}\python.exe'): - return exe - # We tried! return C.DEFAULT @@ -155,12 +150,6 @@ def norm_version(version: str) -> str: if version_exec and version_exec != version: return version_exec - # If it is in the form pythonx.x search in the default - # place on windows - if version.startswith('python'): - default_folder_name = version.replace('.', '') - return fr'C:\{default_folder_name}\python.exe' - # Otherwise assume it is a path return os.path.expanduser(version) From 13eed4ac5bcb4640bb30a5368bf6324a32ee8bc7 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 18 Sep 2020 09:13:19 -0700 Subject: [PATCH 022/129] Fix ruby hooks when --format-executable is in gemrc I used this gemrc to break things (default on opensuse): ```yaml --- :benchmark: false :install: --format-executable --no-user-install install: --format-executable --no-user-install :backtrace: true :update_sources: true :format_executable: true :verbose: true :update: --format-executable --no-user-install update: --format-executable --no-user-install :bulk_threshold: 1000 :sources: - https://rubygems.org ``` --- pre_commit/languages/ruby.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index 73b23cc07..ef73961f1 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -134,7 +134,8 @@ def install_environment( helpers.run_setup_cmd( prefix, ( - 'gem', 'install', '--no-document', + 'gem', 'install', + '--no-document', '--no-format-executable', *prefix.star('.gem'), *additional_dependencies, ), ) From 91530f1005a559e73f269ab602b2c9bfde1a66b6 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 20 Sep 2020 10:19:31 -0700 Subject: [PATCH 023/129] check cygwin mismatch earlier --- pre_commit/clientlib.py | 2 +- pre_commit/error_handler.py | 5 +---- pre_commit/errors.py | 2 ++ pre_commit/git.py | 20 ++++++++++++++++++-- pre_commit/main.py | 23 ++++------------------- tests/error_handler_test.py | 11 ++++++----- tests/main_test.py | 2 +- 7 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 pre_commit/errors.py diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 8dfa9473e..87679bfa6 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -13,7 +13,7 @@ import pre_commit.constants as C from pre_commit.color import add_color_option -from pre_commit.error_handler import FatalError +from pre_commit.errors import FatalError from pre_commit.languages.all import all_languages from pre_commit.logging_handler import logging_handler from pre_commit.util import parse_version diff --git a/pre_commit/error_handler.py b/pre_commit/error_handler.py index 009f6d9c2..afacab9bb 100644 --- a/pre_commit/error_handler.py +++ b/pre_commit/error_handler.py @@ -7,14 +7,11 @@ import pre_commit.constants as C from pre_commit import output +from pre_commit.errors import FatalError from pre_commit.store import Store from pre_commit.util import force_bytes -class FatalError(RuntimeError): - pass - - def _log_and_exit(msg: str, exc: BaseException, formatted: str) -> None: error_msg = f'{msg}: {type(exc).__name__}: '.encode() + force_bytes(exc) output.write_line_b(error_msg) diff --git a/pre_commit/errors.py b/pre_commit/errors.py new file mode 100644 index 000000000..f84d3f185 --- /dev/null +++ b/pre_commit/errors.py @@ -0,0 +1,2 @@ +class FatalError(RuntimeError): + pass diff --git a/pre_commit/git.py b/pre_commit/git.py index 576bef8cc..ca30eaa7e 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -6,6 +6,8 @@ from typing import Optional from typing import Set +from pre_commit.errors import FatalError +from pre_commit.util import CalledProcessError from pre_commit.util import cmd_output from pre_commit.util import cmd_output_b from pre_commit.util import EnvironT @@ -43,7 +45,21 @@ def no_git_env(_env: Optional[EnvironT] = None) -> Dict[str, str]: def get_root() -> str: - return cmd_output('git', 'rev-parse', '--show-toplevel')[1].strip() + try: + root = cmd_output('git', 'rev-parse', '--show-toplevel')[1].strip() + except CalledProcessError: + raise FatalError( + 'git failed. Is it installed, and are you in a Git repository ' + 'directory?', + ) + else: + if root == '': # pragma: no cover (old git) + raise FatalError( + 'git toplevel unexpectedly empty! make sure you are not ' + 'inside the `.git` directory of your repository.', + ) + else: + return root def get_git_dir(git_root: str = '.') -> str: @@ -181,7 +197,7 @@ def check_for_cygwin_mismatch() -> None: """See https://github.com/pre-commit/pre-commit/issues/354""" if sys.platform in ('cygwin', 'win32'): # pragma: no cover (windows) is_cygwin_python = sys.platform == 'cygwin' - toplevel = cmd_output('git', 'rev-parse', '--show-toplevel')[1] + toplevel = get_root() is_cygwin_git = toplevel.startswith('/') if is_cygwin_python ^ is_cygwin_git: diff --git a/pre_commit/main.py b/pre_commit/main.py index 86479607c..c1eb104ac 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -23,10 +23,8 @@ from pre_commit.commands.sample_config import sample_config from pre_commit.commands.try_repo import try_repo from pre_commit.error_handler import error_handler -from pre_commit.error_handler import FatalError from pre_commit.logging_handler import logging_handler from pre_commit.store import Store -from pre_commit.util import CalledProcessError logger = logging.getLogger('pre_commit') @@ -146,21 +144,8 @@ def _adjust_args_and_chdir(args: argparse.Namespace) -> None: if args.command == 'try-repo' and os.path.exists(args.repo): args.repo = os.path.abspath(args.repo) - try: - toplevel = git.get_root() - except CalledProcessError: - raise FatalError( - 'git failed. Is it installed, and are you in a Git repository ' - 'directory?', - ) - else: - if toplevel == '': # pragma: no cover (old git) - raise FatalError( - 'git toplevel unexpectedly empty! make sure you are not ' - 'inside the `.git` directory of your repository.', - ) - else: - os.chdir(toplevel) + toplevel = git.get_root() + os.chdir(toplevel) args.config = os.path.relpath(args.config) if args.command in {'run', 'try-repo'}: @@ -339,11 +324,11 @@ def main(argv: Optional[Sequence[str]] = None) -> int: parser.parse_args(['--help']) with error_handler(), logging_handler(args.color): + git.check_for_cygwin_mismatch() + if args.command not in COMMANDS_NO_GIT: _adjust_args_and_chdir(args) - git.check_for_cygwin_mismatch() - store = Store() store.mark_config_used(args.config) diff --git a/tests/error_handler_test.py b/tests/error_handler_test.py index 5dc085059..804701f05 100644 --- a/tests/error_handler_test.py +++ b/tests/error_handler_test.py @@ -7,6 +7,7 @@ import re_assert from pre_commit import error_handler +from pre_commit.errors import FatalError from pre_commit.store import Store from pre_commit.util import CalledProcessError from testing.util import cmd_output_mocked_pre_commit_home @@ -26,7 +27,7 @@ def test_error_handler_no_exception(mocked_log_and_exit): def test_error_handler_fatal_error(mocked_log_and_exit): - exc = error_handler.FatalError('just a test') + exc = FatalError('just a test') with error_handler.error_handler(): raise exc @@ -44,7 +45,7 @@ def test_error_handler_fatal_error(mocked_log_and_exit): r' File ".+tests.error_handler_test.py", line \d+, ' r'in test_error_handler_fatal_error\n' r' raise exc\n' - r'(pre_commit\.error_handler\.)?FatalError: just a test\n', + r'(pre_commit\.errors\.)?FatalError: just a test\n', ) pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) @@ -99,11 +100,11 @@ def test_log_and_exit(cap_out, mock_store_dir): tb = ( 'Traceback (most recent call last):\n' ' File "", line 2, in \n' - 'pre_commit.error_handler.FatalError: hai\n' + 'pre_commit.errors.FatalError: hai\n' ) with pytest.raises(SystemExit): - error_handler._log_and_exit('msg', error_handler.FatalError('hai'), tb) + error_handler._log_and_exit('msg', FatalError('hai'), tb) printed = cap_out.get() log_file = os.path.join(mock_store_dir, 'pre-commit.log') @@ -133,7 +134,7 @@ def test_log_and_exit(cap_out, mock_store_dir): r'```\n' r'Traceback \(most recent call last\):\n' r' File "", line 2, in \n' - r'pre_commit\.error_handler\.FatalError: hai\n' + r'pre_commit\.errors\.FatalError: hai\n' r'```\n', ) pattern.assert_matches(logged) diff --git a/tests/main_test.py b/tests/main_test.py index f7abeeb4d..6738df683 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -6,7 +6,7 @@ import pre_commit.constants as C from pre_commit import main -from pre_commit.error_handler import FatalError +from pre_commit.errors import FatalError from testing.auto_namedtuple import auto_namedtuple From 365f896c36caa206ee0fd6feb9295e65e6db71bb Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 20 Sep 2020 19:20:54 -0700 Subject: [PATCH 024/129] fix a few spelling errors found via `pre-commit try-repo https://github.com/codespell-project/codespell --all-files` --- CHANGELOG.md | 2 +- pre_commit/languages/conda.py | 2 +- tests/xargs_test.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a92a6b36c..1621bb3fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1108,7 +1108,7 @@ that have helped us get this far! 0.18.1 - 2017-09-04 =================== - Only mention locking when waiting for a lock. -- Fix `IOError` during locking in timeout situtation on windows under python 2. +- Fix `IOError` during locking in timeout situation on windows under python 2. 0.18.0 - 2017-09-02 =================== diff --git a/pre_commit/languages/conda.py b/pre_commit/languages/conda.py index 071757a1f..d634e4931 100644 --- a/pre_commit/languages/conda.py +++ b/pre_commit/languages/conda.py @@ -77,7 +77,7 @@ def run_hook( color: bool, ) -> Tuple[int, bytes]: # TODO: Some rare commands need to be run using `conda run` but mostly we - # can run them withot which is much quicker and produces a better + # can run them without which is much quicker and produces a better # output. # cmd = ('conda', 'run', '-p', env_dir) + hook.cmd with in_env(hook.prefix, hook.language_version): diff --git a/tests/xargs_test.py b/tests/xargs_test.py index 1fc920725..4f6136ede 100644 --- a/tests/xargs_test.py +++ b/tests/xargs_test.py @@ -160,7 +160,7 @@ def test_xargs_concurrency(): assert ret == 0 pids = stdout.splitlines() assert len(pids) == 5 - # It would take 0.5*5=2.5 seconds ot run all of these in serial, so if it + # It would take 0.5*5=2.5 seconds to run all of these in serial, so if it # takes less, they must have run concurrently. assert elapsed < 2.5 From 36653586a0810b4dd57b3853820c8c5f741554c3 Mon Sep 17 00:00:00 2001 From: Thomas Romera Date: Tue, 22 Sep 2020 23:02:05 -0700 Subject: [PATCH 025/129] update rbenv / ruby-build --- pre_commit/make_archives.py | 4 ++-- pre_commit/resources/rbenv.tar.gz | Bin 31781 -> 34224 bytes pre_commit/resources/ruby-build.tar.gz | Bin 62567 -> 72807 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pre_commit/make_archives.py b/pre_commit/make_archives.py index c31bcd714..d320b830d 100644 --- a/pre_commit/make_archives.py +++ b/pre_commit/make_archives.py @@ -15,8 +15,8 @@ REPOS = ( - ('rbenv', 'git://github.com/rbenv/rbenv', 'a3fa9b7'), - ('ruby-build', 'git://github.com/rbenv/ruby-build', '1a902f3'), + ('rbenv', 'git://github.com/rbenv/rbenv', '0843745'), + ('ruby-build', 'git://github.com/rbenv/ruby-build', '258455e'), ( 'ruby-download', 'git://github.com/garnieretienne/rvm-download', diff --git a/pre_commit/resources/rbenv.tar.gz b/pre_commit/resources/rbenv.tar.gz index 5307b19d63ef650032717a5ebbf667198809dfee..97ac469a77bbd421f59a4d234ffce3e4c47194bd 100644 GIT binary patch literal 34224 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 z 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 M+Dxp-i343@S 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 literal 31781 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%0DX^HE0 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%0AcDMh%UGT>#`||~+1FOtBlZ%SrXoNM@14%S& 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 t?EmIiReVn str: :param text destdir: Directory to place archives in. """ output_path = os.path.join(destdir, f'{name}.tar.gz') - with tmpdir() as tempdir: + with tempfile.TemporaryDirectory() as tmpdir: # Clone the repository to the temporary directory - cmd_output_b('git', 'clone', repo, tempdir) - cmd_output_b('git', 'checkout', ref, cwd=tempdir) + subprocess.check_call(('git', 'clone', repo, tmpdir)) + subprocess.check_call(('git', '-C', tmpdir, 'checkout', ref)) # We don't want the '.git' directory # It adds a bunch of size to the archive and we don't use it at # runtime - rmtree(os.path.join(tempdir, '.git')) + shutil.rmtree(os.path.join(tmpdir, '.git')) with tarfile.open(output_path, 'w|gz') as tf: - tf.add(tempdir, name) + tf.add(tmpdir, name) return output_path @@ -56,7 +55,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: parser.add_argument('--dest', default='pre_commit/resources') args = parser.parse_args(argv) for archive_name, repo, ref in REPOS: - output.write_line(f'Making {archive_name}.tar.gz for {repo}@{ref}') + print(f'Making {archive_name}.tar.gz for {repo}@{ref}') make_archive(archive_name, repo, ref, args.dest) return 0 diff --git a/tests/make_archives_test.py b/tests/make_archives_test.py deleted file mode 100644 index 6ae2f8e74..000000000 --- a/tests/make_archives_test.py +++ /dev/null @@ -1,46 +0,0 @@ -import tarfile - -from pre_commit import git -from pre_commit import make_archives -from pre_commit.util import cmd_output -from testing.util import git_commit - - -def test_make_archive(in_git_dir, tmpdir): - output_dir = tmpdir.join('output').ensure_dir() - # Add a files to the git directory - in_git_dir.join('foo').ensure() - cmd_output('git', 'add', '.') - git_commit() - # We'll use this rev - head_rev = git.head_rev('.') - # And check that this file doesn't exist - in_git_dir.join('bar').ensure() - cmd_output('git', 'add', '.') - git_commit() - - # Do the thing - archive_path = make_archives.make_archive( - 'foo', in_git_dir.strpath, head_rev, output_dir.strpath, - ) - - expected = output_dir.join('foo.tar.gz') - assert archive_path == expected.strpath - assert expected.exists() - - extract_dir = tmpdir.join('extract').ensure_dir() - with tarfile.open(archive_path) as tf: - tf.extractall(extract_dir.strpath) - - # Verify the contents of the tar - assert extract_dir.join('foo').isdir() - assert extract_dir.join('foo/foo').exists() - assert not extract_dir.join('foo/.git').exists() - assert not extract_dir.join('foo/bar').exists() - - -def test_main(tmpdir): - make_archives.main(('--dest', tmpdir.strpath)) - - for archive, _, _ in make_archives.REPOS: - assert tmpdir.join(f'{archive}.tar.gz').exists() From fb590d41ff11eb65e77b736e0def12715b2b3356 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 4 Apr 2021 10:00:49 -0700 Subject: [PATCH 108/129] give xargs batch file execution additional headroom --- pre_commit/xargs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py index 60a057c19..6b0fa2086 100644 --- a/pre_commit/xargs.py +++ b/pre_commit/xargs.py @@ -145,7 +145,9 @@ def xargs( # this is implementation details but the command gets translated into # full/path/to/cmd.exe /c *cmd cmd_exe = parse_shebang.find_executable('cmd.exe') - _max_length = 8192 - len(cmd_exe) - len(' /c ') + # 1024 is additionally subtracted to give headroom for further + # expansion inside the batch file + _max_length = 8192 - len(cmd_exe) - len(' /c ') - 1024 partitions = partition(cmd, varargs, target_concurrency, _max_length) From 5827a93c2fc94194ad375c25d0885972975867f8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 5 Apr 2021 17:08:42 +0000 Subject: [PATCH 109/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b63d5a9ad..3193b8cca 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: - id: name-tests-test - id: requirements-txt-fixer - id: double-quote-string-fixer -- repo: https://gitlab.com/pycqa/flake8 +- repo: https://github.com/PyCQA/flake8 rev: 3.9.0 hooks: - id: flake8 From d5eda977ce2e4ae586b9ff4146fecbaed7b574ea Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 6 Apr 2021 07:55:32 -0700 Subject: [PATCH 110/129] fix archive permissions for ruby tar.gz roots --- pre_commit/resources/rbenv.tar.gz | Bin 34224 -> 34250 bytes pre_commit/resources/ruby-build.tar.gz | Bin 74163 -> 74218 bytes pre_commit/resources/ruby-download.tar.gz | Bin 5343 -> 5533 bytes testing/make-archives | 11 +++++++---- tests/languages/ruby_test.py | 13 +++++++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pre_commit/resources/rbenv.tar.gz b/pre_commit/resources/rbenv.tar.gz index 97ac469a77bbd421f59a4d234ffce3e4c47194bd..95b5a364dff06d5fc8f1176a9ee477c817942b46 100644 GIT binary patch delta 33626 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 delta 33597 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

?{!SmN`Jv=Jq=lu9 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 literal 5343 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 diff --git a/testing/make-archives b/testing/make-archives index ae7d58462..b2b288cfa 100755 --- a/testing/make-archives +++ b/testing/make-archives @@ -35,17 +35,20 @@ def make_archive(name: str, repo: str, ref: str, destdir: str) -> str: """ output_path = os.path.join(destdir, f'{name}.tar.gz') with tempfile.TemporaryDirectory() as tmpdir: + # this ensures that the root directory has umask permissions + gitdir = os.path.join(tmpdir, 'root') + # Clone the repository to the temporary directory - subprocess.check_call(('git', 'clone', repo, tmpdir)) - subprocess.check_call(('git', '-C', tmpdir, 'checkout', ref)) + subprocess.check_call(('git', 'clone', repo, gitdir)) + subprocess.check_call(('git', '-C', gitdir, 'checkout', ref)) # We don't want the '.git' directory # It adds a bunch of size to the archive and we don't use it at # runtime - shutil.rmtree(os.path.join(tmpdir, '.git')) + shutil.rmtree(os.path.join(gitdir, '.git')) with tarfile.open(output_path, 'w|gz') as tf: - tf.add(tmpdir, name) + tf.add(gitdir, name) return output_path diff --git a/tests/languages/ruby_test.py b/tests/languages/ruby_test.py index 6c0c9e5e0..0c6cfede4 100644 --- a/tests/languages/ruby_test.py +++ b/tests/languages/ruby_test.py @@ -1,4 +1,5 @@ import os.path +import tarfile from unittest import mock import pytest @@ -8,6 +9,7 @@ from pre_commit.languages import ruby from pre_commit.prefix import Prefix from pre_commit.util import cmd_output +from pre_commit.util import resource_bytesio from testing.util import xfailif_windows @@ -72,3 +74,14 @@ def test_install_ruby_with_version(fake_gem_prefix): # Should be able to activate and use rbenv install with ruby.in_env(fake_gem_prefix, '2.7.2'): cmd_output('rbenv', 'install', '--help') + + +@pytest.mark.parametrize( + 'filename', + ('rbenv.tar.gz', 'ruby-build.tar.gz', 'ruby-download.tar.gz'), +) +def test_archive_root_stat(filename): + with resource_bytesio(filename) as f: + with tarfile.open(fileobj=f) as tarf: + root, _, _ = filename.partition('.') + assert oct(tarf.getmember(root).mode) == '0o755' From a1b462c94a94aa15af3d676700c834f79d2b2b7e Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 6 Apr 2021 08:18:14 -0700 Subject: [PATCH 111/129] v2.12.0 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 16 ++++++++++++++++ setup.cfg | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3193b8cca..0c6d63606 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.11.1 + rev: v2.12.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da78662e..2d6a35d9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +2.12.0 - 2021-04-06 +=================== + +### Features +- Upgrade rbenv. + - #1854 PR by @asottile. + - #1848 issue by @sirosen. + +### Fixes +- Give command length a little more room when running batch files on windows + so underlying commands can expand further. + - #1864 PR by @asottile. + - pre-commit/mirrors-prettier#7 issue by @DeltaXWizard. +- Fix permissions of root folder in ruby archives. + - #1868 PR by @asottile. + 2.11.1 - 2021-03-09 =================== diff --git a/setup.cfg b/setup.cfg index ceb1cd4c2..b336e5829 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.11.1 +version = 2.12.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 5deeb82e0e01ecb7cc5b22eaf2f83dc93a92f7d0 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 8 Apr 2021 19:22:17 -0700 Subject: [PATCH 112/129] Update azure-pipelines template repositories Committed via https://github.com/asottile/all-repos --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 34ace234e..58dee74a8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,7 +10,7 @@ resources: type: github endpoint: github name: asottile/azure-pipeline-templates - ref: refs/tags/v2.0.0 + ref: refs/tags/v2.1.0 jobs: - template: job--python-tox.yml@asottile From 12a7075fda885a7c241aa137238681f2a9d7211f Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 10 Apr 2021 00:37:59 -0700 Subject: [PATCH 113/129] skip installation for SKIP'd hooks --- pre_commit/commands/run.py | 8 +++++--- tests/commands/run_test.py | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 05c3268e3..0fef50d1c 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -271,11 +271,11 @@ def _get_diff() -> bytes: def _run_hooks( config: Dict[str, Any], hooks: Sequence[Hook], + skips: Set[str], args: argparse.Namespace, environ: MutableMapping[str, str], ) -> int: """Actually run the hooks.""" - skips = _get_skips(environ) cols = _compute_cols(hooks) classifier = Classifier.from_config( _all_filenames(args), config['files'], config['exclude'], @@ -403,9 +403,11 @@ def run( ) return 1 - install_hook_envs(hooks, store) + skips = _get_skips(environ) + to_install = [hook for hook in hooks if hook.id not in skips] + install_hook_envs(to_install, store) - return _run_hooks(config, hooks, args, environ) + return _run_hooks(config, hooks, skips, args, environ) # https://github.com/python/mypy/issues/7726 raise AssertionError('unreachable') diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 4cd70fd43..8dcb5796b 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -600,6 +600,29 @@ def test_skip_aliased_hook(cap_out, store, aliased_repo): assert printed.count(msg) == 1 +def test_skip_bypasses_installation(cap_out, store, repo_with_passing_hook): + config = { + 'repo': 'local', + 'hooks': [ + { + 'id': 'skipme', + 'name': 'skipme', + 'entry': 'skipme', + 'language': 'python', + 'additional_dependencies': ['/pre-commit-does-not-exist'], + }, + ], + } + add_config_to_repo(repo_with_passing_hook, config) + + ret, printed = _do_run( + cap_out, store, repo_with_passing_hook, + run_opts(all_files=True), + {'SKIP': 'skipme'}, + ) + assert ret == 0 + + def test_hook_id_not_in_non_verbose_output( cap_out, store, repo_with_passing_hook, ): From 30649e7feebda48dde0740657af6e11f654d5890 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 17:09:59 +0000 Subject: [PATCH 114/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0c6d63606..e61e688db 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.11.0 + rev: v2.12.0 hooks: - id: pyupgrade args: [--py36-plus] From 4f2069ee9aef78dfd0ca059c338b8b148429b48e Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Fri, 16 Apr 2021 16:43:54 +0100 Subject: [PATCH 115/129] Include PID in patch filename Fixes #1880. --- pre_commit/staged_files_only.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pre_commit/staged_files_only.py b/pre_commit/staged_files_only.py index 617930102..48cc10299 100644 --- a/pre_commit/staged_files_only.py +++ b/pre_commit/staged_files_only.py @@ -47,7 +47,7 @@ def _unstaged_changes_cleared(patch_dir: str) -> Generator[None, None, None]: retcode=None, ) if retcode and diff_stdout_binary.strip(): - patch_filename = f'patch{int(time.time())}' + patch_filename = f'patch{int(time.time())}-{os.getpid()}' patch_filename = os.path.join(patch_dir, patch_filename) logger.warning('Unstaged files detected.') logger.info(f'Stashing unstaged files to {patch_filename}.') From 8fc66027f78b193a7e940b10a3b9320b1641117e Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 16 Apr 2021 14:14:17 -0700 Subject: [PATCH 116/129] v2.12.1 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 8 ++++++++ setup.cfg | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e61e688db..214c2857e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.12.0 + rev: v2.12.1 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d6a35d9b..2f154c447 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +2.12.1 - 2021-04-16 +=================== + +### Fixes +- Fix race condition when stashing files in multiple parallel invocations + - #1881 PR by @adamchainz. + - #1880 issue by @adamchainz. + 2.12.0 - 2021-04-06 =================== diff --git a/setup.cfg b/setup.cfg index b336e5829..400299870 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.12.0 +version = 2.12.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From de2b7b6dcc3b018e3f630b1716e1e5bb177b6f39 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 17:08:45 +0000 Subject: [PATCH 117/129] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/PyCQA/flake8: 3.9.0 → 3.9.1](https://github.com/PyCQA/flake8/compare/3.9.0...3.9.1) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 214c2857e..f893f3e07 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,7 @@ repos: - id: requirements-txt-fixer - id: double-quote-string-fixer - repo: https://github.com/PyCQA/flake8 - rev: 3.9.0 + rev: 3.9.1 hooks: - id: flake8 additional_dependencies: [flake8-typing-imports==1.10.0] From 60bf370a7da71026ed5a1a4a6d7e2691b8d5bcbe Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 17:18:40 +0000 Subject: [PATCH 118/129] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v2.12.0 → v2.13.0](https://github.com/asottile/pyupgrade/compare/v2.12.0...v2.13.0) - [github.com/asottile/reorder_python_imports: v2.4.0 → v2.5.0](https://github.com/asottile/reorder_python_imports/compare/v2.4.0...v2.5.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f893f3e07..6438bf835 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,12 +25,12 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.12.0 + rev: v2.13.0 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/asottile/reorder_python_imports - rev: v2.4.0 + rev: v2.5.0 hooks: - id: reorder-python-imports args: [--py3-plus] From 6d5d386c9f76c113ba2f2992aa73f56a2a407854 Mon Sep 17 00:00:00 2001 From: Oleg Kainov Date: Wed, 21 Apr 2021 21:00:48 +0300 Subject: [PATCH 119/129] fix: fix path mounting when running in Docker Currently pre-commit mounts the current directory to /src and uses current directory name as mount base. However this does not work when pre-commit is run inside the container on some mounted path already, because mount points are relative to the host, not to the container. Fixes #1387 --- pre_commit/languages/docker.py | 33 +++++++- tests/languages/docker_test.py | 147 ++++++++++++++++++++++++++++++++- 2 files changed, 176 insertions(+), 4 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index 9d30568c5..5b21ec94c 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -1,5 +1,7 @@ import hashlib +import json import os +import socket from typing import Sequence from typing import Tuple @@ -8,6 +10,7 @@ from pre_commit.languages import helpers from pre_commit.prefix import Prefix from pre_commit.util import clean_path_on_failure +from pre_commit.util import cmd_output_b ENVIRONMENT_DIR = 'docker' PRE_COMMIT_LABEL = 'PRE_COMMIT' @@ -15,6 +18,34 @@ healthy = helpers.basic_healthy +def _is_in_docker() -> bool: + try: + with open('/proc/1/cgroup', 'rb') as f: + return b'docker' in f.read() + except FileNotFoundError: + return False + + +def _get_docker_path(path: str) -> str: + if not _is_in_docker(): + return path + hostname = socket.gethostname() + + _, out, _ = cmd_output_b('docker', 'inspect', hostname) + + container, = json.loads(out) + for mount in container['Mounts']: + src_path = mount['Source'] + to_path = mount['Destination'] + if os.path.commonpath((path, to_path)) == to_path: + # So there is something in common, + # and we can proceed remapping it + return path.replace(to_path, src_path) + # we're in Docker, but the path is not mounted, cannot really do anything, + # so fall back to original path + return path + + def md5(s: str) -> str: # pragma: win32 no cover return hashlib.md5(s.encode()).hexdigest() @@ -73,7 +104,7 @@ def docker_cmd() -> Tuple[str, ...]: # pragma: win32 no cover # https://docs.docker.com/engine/reference/commandline/run/#mount-volumes-from-container-volumes-from # The `Z` option tells Docker to label the content with a private # unshared label. Only the current container can use a private volume. - '-v', f'{os.getcwd()}:/src:rw,Z', + '-v', f'{_get_docker_path(os.getcwd())}:/src:rw,Z', '--workdir', '/src', ) diff --git a/tests/languages/docker_test.py b/tests/languages/docker_test.py index 3bed4bfa5..01b5e2773 100644 --- a/tests/languages/docker_test.py +++ b/tests/languages/docker_test.py @@ -1,14 +1,155 @@ +import builtins +import json +import ntpath +import os.path +import posixpath from unittest import mock +import pytest + from pre_commit.languages import docker def test_docker_fallback_user(): def invalid_attribute(): raise AttributeError + with mock.patch.multiple( - 'os', create=True, - getuid=invalid_attribute, - getgid=invalid_attribute, + 'os', create=True, + getuid=invalid_attribute, + getgid=invalid_attribute, ): assert docker.get_docker_user() == () + + +def test_in_docker_no_file(): + with mock.patch.object(builtins, 'open', side_effect=FileNotFoundError): + assert docker._is_in_docker() is False + + +def _mock_open(data): + return mock.patch.object( + builtins, + 'open', + new_callable=mock.mock_open, + read_data=data, + ) + + +def test_in_docker_docker_in_file(): + docker_cgroup_example = b'''\ +12:hugetlb:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +11:blkio:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +10:freezer:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +9:cpu,cpuacct:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +8:pids:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +7:rdma:/ +6:net_cls,net_prio:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +5:cpuset:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +4:devices:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +3:memory:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +2:perf_event:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +1:name=systemd:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 +0::/system.slice/containerd.service +''' # noqa: E501 + with _mock_open(docker_cgroup_example): + assert docker._is_in_docker() is True + + +def test_in_docker_docker_not_in_file(): + non_docker_cgroup_example = b'''\ +12:perf_event:/ +11:hugetlb:/ +10:devices:/ +9:blkio:/ +8:rdma:/ +7:cpuset:/ +6:cpu,cpuacct:/ +5:freezer:/ +4:memory:/ +3:pids:/ +2:net_cls,net_prio:/ +1:name=systemd:/init.scope +0::/init.scope +''' + with _mock_open(non_docker_cgroup_example): + assert docker._is_in_docker() is False + + +def test_get_docker_path_not_in_docker_returns_same(): + with mock.patch.object(docker, '_is_in_docker', return_value=False): + assert docker._get_docker_path('abc') == 'abc' + + +@pytest.fixture +def in_docker(): + with mock.patch.object(docker, '_is_in_docker', return_value=True): + yield + + +def _linux_commonpath(): + return mock.patch.object(os.path, 'commonpath', posixpath.commonpath) + + +def _nt_commonpath(): + return mock.patch.object(os.path, 'commonpath', ntpath.commonpath) + + +def _docker_output(out): + ret = (0, out, b'') + return mock.patch.object(docker, 'cmd_output_b', return_value=ret) + + +def test_get_docker_path_in_docker_no_binds_same_path(in_docker): + docker_out = json.dumps([{'Mounts': []}]).encode() + + with _docker_output(docker_out): + assert docker._get_docker_path('abc') == 'abc' + + +def test_get_docker_path_in_docker_binds_path_equal(in_docker): + binds_list = [{'Source': '/opt/my_code', 'Destination': '/project'}] + docker_out = json.dumps([{'Mounts': binds_list}]).encode() + + with _linux_commonpath(), _docker_output(docker_out): + assert docker._get_docker_path('/project') == '/opt/my_code' + + +def test_get_docker_path_in_docker_binds_path_complex(in_docker): + binds_list = [{'Source': '/opt/my_code', 'Destination': '/project'}] + docker_out = json.dumps([{'Mounts': binds_list}]).encode() + + with _linux_commonpath(), _docker_output(docker_out): + path = '/project/test/something' + assert docker._get_docker_path(path) == '/opt/my_code/test/something' + + +def test_get_docker_path_in_docker_no_substring(in_docker): + binds_list = [{'Source': '/opt/my_code', 'Destination': '/project'}] + docker_out = json.dumps([{'Mounts': binds_list}]).encode() + + with _linux_commonpath(), _docker_output(docker_out): + path = '/projectSuffix/test/something' + assert docker._get_docker_path(path) == path + + +def test_get_docker_path_in_docker_binds_path_many_binds(in_docker): + binds_list = [ + {'Source': '/something_random', 'Destination': '/not-related'}, + {'Source': '/opt/my_code', 'Destination': '/project'}, + {'Source': '/something-random-2', 'Destination': '/not-related-2'}, + ] + docker_out = json.dumps([{'Mounts': binds_list}]).encode() + + with _linux_commonpath(), _docker_output(docker_out): + assert docker._get_docker_path('/project') == '/opt/my_code' + + +def test_get_docker_path_in_docker_windows(in_docker): + binds_list = [{'Source': r'c:\users\user', 'Destination': r'c:\folder'}] + docker_out = json.dumps([{'Mounts': binds_list}]).encode() + + with _nt_commonpath(), _docker_output(docker_out): + path = r'c:\folder\test\something' + expected = r'c:\users\user\test\something' + assert docker._get_docker_path(path) == expected From a19a59652f736deb43b6c150fb8e33eb3bb04aa2 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Mon, 3 May 2021 18:08:22 +0200 Subject: [PATCH 120/129] Use more common package definition --- pre_commit/languages/r.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pre_commit/languages/r.py b/pre_commit/languages/r.py index 83e600094..64234c1d1 100644 --- a/pre_commit/languages/r.py +++ b/pre_commit/languages/r.py @@ -107,11 +107,13 @@ def install_environment( 'renv::activate("', file.path(getwd()), '"); ' ) writeLines(activate_statement, 'activate.R') - is_package <- tryCatch({{ - content_desc <- read.dcf(file.path(prefix_dir, 'DESCRIPTION')) - suppressWarnings(unname(content_desc[,'Type']) == "Package") - }}, - error = function(...) FALSE + is_package <- tryCatch( + {{ + path_desc <- file.path(prefix_dir, 'DESCRIPTION') + suppressWarnings(desc <- read.dcf(path_desc)) + "Package" %in% colnames(desc) + }}, + error = function(...) FALSE ) if (is_package) {{ renv::install(prefix_dir) From 6485dd45a33953f6fa23a32e35b5c78c4c65aa4c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 May 2021 17:18:16 +0000 Subject: [PATCH 121/129] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-autopep8: v1.5.6 → v1.5.7](https://github.com/pre-commit/mirrors-autopep8/compare/v1.5.6...v1.5.7) - [github.com/asottile/pyupgrade: v2.13.0 → v2.14.0](https://github.com/asottile/pyupgrade/compare/v2.13.0...v2.14.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6438bf835..329137527 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: flake8 additional_dependencies: [flake8-typing-imports==1.10.0] - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: v1.5.6 + rev: v1.5.7 hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.13.0 + rev: v2.14.0 hooks: - id: pyupgrade args: [--py36-plus] From b8fff8c508b79f70d19a00b7a748effdbf430507 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Tue, 9 Mar 2021 09:28:47 +0100 Subject: [PATCH 122/129] Avoid warnings with R hooks when renv version don't match --- pre_commit/languages/r.py | 30 +- .../resources/empty_template_LICENSE.renv | 7 + .../resources/empty_template_activate.R | 440 ++++++++++++++++++ pre_commit/store.py | 11 +- testing/resources/r_hooks_repo/renv/LICENSE | 7 + .../resources/r_hooks_repo/renv/activate.R | 440 ++++++++++++++++++ tests/store_test.py | 2 +- 7 files changed, 919 insertions(+), 18 deletions(-) create mode 100644 pre_commit/resources/empty_template_LICENSE.renv create mode 100644 pre_commit/resources/empty_template_activate.R create mode 100644 testing/resources/r_hooks_repo/renv/LICENSE create mode 100644 testing/resources/r_hooks_repo/renv/activate.R diff --git a/pre_commit/languages/r.py b/pre_commit/languages/r.py index 83e600094..fb789f9d4 100644 --- a/pre_commit/languages/r.py +++ b/pre_commit/languages/r.py @@ -15,6 +15,7 @@ from pre_commit.util import cmd_output_b ENVIRONMENT_DIR = 'renv' +RSCRIPT_OPTS = ('--no-save', '--no-restore', '--no-site-file', '--no-environ') get_default_version = helpers.basic_get_default_version healthy = helpers.basic_healthy @@ -69,12 +70,11 @@ def _entry_validate(entry: Sequence[str]) -> None: def _cmd_from_hook(hook: Hook) -> Tuple[str, ...]: - opts = ('--no-save', '--no-restore', '--no-site-file', '--no-environ') entry = shlex.split(hook.entry) _entry_validate(entry) return ( - *entry[:1], *opts, + *entry[:1], *RSCRIPT_OPTS, *_prefix_if_file_entry(entry, hook.prefix), *hook.args, ) @@ -89,22 +89,23 @@ def install_environment( with clean_path_on_failure(env_dir): os.makedirs(env_dir, exist_ok=True) shutil.copy(prefix.path('renv.lock'), env_dir) + shutil.copytree(prefix.path('renv'), os.path.join(env_dir, 'renv')) cmd_output_b( 'Rscript', '--vanilla', '-e', f"""\ prefix_dir <- {prefix.prefix_dir!r} - missing_pkgs <- setdiff( - "renv", unname(installed.packages()[, "Package"]) - ) options( repos = c(CRAN = "https://cran.rstudio.com"), renv.consent = TRUE ) - install.packages(missing_pkgs) - renv::activate() + source("renv/activate.R") renv::restore() activate_statement <- paste0( - 'renv::activate("', file.path(getwd()), '"); ' + 'suppressWarnings({{', + 'old <- setwd("', getwd(), '"); ', + 'source("renv/activate.R"); ', + 'setwd(old); ', + 'renv::load("', getwd(), '");}})' ) writeLines(activate_statement, 'activate.R') is_package <- tryCatch({{ @@ -120,12 +121,13 @@ def install_environment( cwd=env_dir, ) if additional_dependencies: - cmd_output_b( - 'Rscript', '-e', - 'renv::install(commandArgs(trailingOnly = TRUE))', - *additional_dependencies, - cwd=env_dir, - ) + with in_env(prefix, version): + cmd_output_b( + 'Rscript', *RSCRIPT_OPTS, '-e', + 'renv::install(commandArgs(trailingOnly = TRUE))', + *additional_dependencies, + cwd=env_dir, + ) def run_hook( diff --git a/pre_commit/resources/empty_template_LICENSE.renv b/pre_commit/resources/empty_template_LICENSE.renv new file mode 100644 index 000000000..253c5d1ab --- /dev/null +++ b/pre_commit/resources/empty_template_LICENSE.renv @@ -0,0 +1,7 @@ +Copyright 2021 RStudio, PBC + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pre_commit/resources/empty_template_activate.R b/pre_commit/resources/empty_template_activate.R new file mode 100644 index 000000000..d8d092cc6 --- /dev/null +++ b/pre_commit/resources/empty_template_activate.R @@ -0,0 +1,440 @@ + +local({ + + # the requested version of renv + version <- "0.12.5" + + # the project directory + project <- getwd() + + # avoid recursion + if (!is.na(Sys.getenv("RENV_R_INITIALIZING", unset = NA))) + return(invisible(TRUE)) + + # signal that we're loading renv during R startup + Sys.setenv("RENV_R_INITIALIZING" = "true") + on.exit(Sys.unsetenv("RENV_R_INITIALIZING"), add = TRUE) + + # signal that we've consented to use renv + options(renv.consent = TRUE) + + # load the 'utils' package eagerly -- this ensures that renv shims, which + # mask 'utils' packages, will come first on the search path + library(utils, lib.loc = .Library) + + # check to see if renv has already been loaded + if ("renv" %in% loadedNamespaces()) { + + # if renv has already been loaded, and it's the requested version of renv, + # nothing to do + spec <- .getNamespaceInfo(.getNamespace("renv"), "spec") + if (identical(spec[["version"]], version)) + return(invisible(TRUE)) + + # otherwise, unload and attempt to load the correct version of renv + unloadNamespace("renv") + + } + + # load bootstrap tools + bootstrap <- function(version, library) { + + # attempt to download renv + tarball <- tryCatch(renv_bootstrap_download(version), error = identity) + if (inherits(tarball, "error")) + stop("failed to download renv ", version) + + # now attempt to install + status <- tryCatch(renv_bootstrap_install(version, tarball, library), error = identity) + if (inherits(status, "error")) + stop("failed to install renv ", version) + + } + + renv_bootstrap_tests_running <- function() { + getOption("renv.tests.running", default = FALSE) + } + + renv_bootstrap_repos <- function() { + + # check for repos override + repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) + if (!is.na(repos)) + return(repos) + + # if we're testing, re-use the test repositories + if (renv_bootstrap_tests_running()) + return(getOption("renv.tests.repos")) + + # retrieve current repos + repos <- getOption("repos") + + # ensure @CRAN@ entries are resolved + repos[repos == "@CRAN@"] <- "https://cloud.r-project.org" + + # add in renv.bootstrap.repos if set + default <- c(CRAN = "https://cloud.r-project.org") + extra <- getOption("renv.bootstrap.repos", default = default) + repos <- c(repos, extra) + + # remove duplicates that might've snuck in + dupes <- duplicated(repos) | duplicated(names(repos)) + repos[!dupes] + + } + + renv_bootstrap_download <- function(version) { + + # if the renv version number has 4 components, assume it must + # be retrieved via github + nv <- numeric_version(version) + components <- unclass(nv)[[1]] + + methods <- if (length(components) == 4L) { + list( + renv_bootstrap_download_github + ) + } else { + list( + renv_bootstrap_download_cran_latest, + renv_bootstrap_download_cran_archive + ) + } + + for (method in methods) { + path <- tryCatch(method(version), error = identity) + if (is.character(path) && file.exists(path)) + return(path) + } + + stop("failed to download renv ", version) + + } + + renv_bootstrap_download_impl <- function(url, destfile) { + + mode <- "wb" + + # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 + fixup <- + Sys.info()[["sysname"]] == "Windows" && + substring(url, 1L, 5L) == "file:" + + if (fixup) + mode <- "w+b" + + utils::download.file( + url = url, + destfile = destfile, + mode = mode, + quiet = TRUE + ) + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + repos <- renv_bootstrap_download_cran_latest_find(version) + + message("* Downloading renv ", version, " from CRAN ... ", appendLF = FALSE) + + info <- tryCatch( + utils::download.packages( + pkgs = "renv", + repos = repos, + destdir = tempdir(), + quiet = TRUE + ), + condition = identity + ) + + if (inherits(info, "condition")) { + message("FAILED") + return(FALSE) + } + + message("OK") + info[1, 2] + + } + + renv_bootstrap_download_cran_latest_find <- function(version) { + + all <- renv_bootstrap_repos() + + for (repos in all) { + + db <- tryCatch( + as.data.frame( + x = utils::available.packages(repos = repos), + stringsAsFactors = FALSE + ), + error = identity + ) + + if (inherits(db, "error")) + next + + entry <- db[db$Package %in% "renv" & db$Version %in% version, ] + if (nrow(entry) == 0) + next + + return(repos) + + } + + fmt <- "renv %s is not available from your declared package repositories" + stop(sprintf(fmt, version)) + + } + + renv_bootstrap_download_cran_archive <- function(version) { + + name <- sprintf("renv_%s.tar.gz", version) + repos <- renv_bootstrap_repos() + urls <- file.path(repos, "src/contrib/Archive/renv", name) + destfile <- file.path(tempdir(), name) + + message("* Downloading renv ", version, " from CRAN archive ... ", appendLF = FALSE) + + for (url in urls) { + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (identical(status, 0L)) { + message("OK") + return(destfile) + } + + } + + message("FAILED") + return(FALSE) + + } + + renv_bootstrap_download_github <- function(version) { + + enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") + if (!identical(enabled, "TRUE")) + return(FALSE) + + # prepare download options + pat <- Sys.getenv("GITHUB_PAT") + if (nzchar(Sys.which("curl")) && nzchar(pat)) { + fmt <- "--location --fail --header \"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "curl", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { + fmt <- "--header=\"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "wget", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } + + message("* Downloading renv ", version, " from GitHub ... ", appendLF = FALSE) + + url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) + name <- sprintf("renv_%s.tar.gz", version) + destfile <- file.path(tempdir(), name) + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (!identical(status, 0L)) { + message("FAILED") + return(FALSE) + } + + message("OK") + return(destfile) + + } + + renv_bootstrap_install <- function(version, tarball, library) { + + # attempt to install it into project library + message("* Installing renv ", version, " ... ", appendLF = FALSE) + dir.create(library, showWarnings = FALSE, recursive = TRUE) + + # invoke using system2 so we can capture and report output + bin <- R.home("bin") + exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" + r <- file.path(bin, exe) + args <- c("--vanilla", "CMD", "INSTALL", "-l", shQuote(library), shQuote(tarball)) + output <- system2(r, args, stdout = TRUE, stderr = TRUE) + message("Done!") + + # check for successful install + status <- attr(output, "status") + if (is.numeric(status) && !identical(status, 0L)) { + header <- "Error installing renv:" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- c(header, lines, output) + writeLines(text, con = stderr()) + } + + status + + } + + renv_bootstrap_prefix <- function() { + + # construct version prefix + version <- paste(R.version$major, R.version$minor, sep = ".") + prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") + + # include SVN revision for development versions of R + # (to avoid sharing platform-specific artefacts with released versions of R) + devel <- + identical(R.version[["status"]], "Under development (unstable)") || + identical(R.version[["nickname"]], "Unsuffered Consequences") + + if (devel) + prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") + + # build list of path components + components <- c(prefix, R.version$platform) + + # include prefix if provided by user + prefix <- Sys.getenv("RENV_PATHS_PREFIX") + if (nzchar(prefix)) + components <- c(prefix, components) + + # build prefix + paste(components, collapse = "/") + + } + + renv_bootstrap_library_root_name <- function(project) { + + # use project name as-is if requested + asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") + if (asis) + return(basename(project)) + + # otherwise, disambiguate based on project's path + id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) + paste(basename(project), id, sep = "-") + + } + + renv_bootstrap_library_root <- function(project) { + + path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) + if (!is.na(path)) + return(path) + + path <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) + if (!is.na(path)) { + name <- renv_bootstrap_library_root_name(project) + return(file.path(path, name)) + } + + file.path(project, "renv/library") + + } + + renv_bootstrap_validate_version <- function(version) { + + loadedversion <- utils::packageDescription("renv", fields = "Version") + if (version == loadedversion) + return(TRUE) + + # assume four-component versions are from GitHub; three-component + # versions are from CRAN + components <- strsplit(loadedversion, "[.-]")[[1]] + remote <- if (length(components) == 4L) + paste("rstudio/renv", loadedversion, sep = "@") + else + paste("renv", loadedversion, sep = "@") + + fmt <- paste( + "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", + "Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", + "Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", + sep = "\n" + ) + + msg <- sprintf(fmt, loadedversion, version, remote) + warning(msg, call. = FALSE) + + FALSE + + } + + renv_bootstrap_hash_text <- function(text) { + + hashfile <- tempfile("renv-hash-") + on.exit(unlink(hashfile), add = TRUE) + + writeLines(text, con = hashfile) + tools::md5sum(hashfile) + + } + + renv_bootstrap_load <- function(project, libpath, version) { + + # try to load renv from the project library + if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) + return(FALSE) + + # warn if the version of renv loaded does not match + renv_bootstrap_validate_version(version) + + # load the project + renv::load(project) + + TRUE + + } + + # construct path to library root + root <- renv_bootstrap_library_root(project) + + # construct library prefix for platform + prefix <- renv_bootstrap_prefix() + + # construct full libpath + libpath <- file.path(root, prefix) + + # attempt to load + if (renv_bootstrap_load(project, libpath, version)) + return(TRUE) + + # load failed; inform user we're about to bootstrap + prefix <- paste("# Bootstrapping renv", version) + postfix <- paste(rep.int("-", 77L - nchar(prefix)), collapse = "") + header <- paste(prefix, postfix) + message(header) + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + message("* Successfully installed and loaded renv ", version, ".") + return(renv::load()) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + +}) diff --git a/pre_commit/store.py b/pre_commit/store.py index 187c9d353..494e688f1 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -189,14 +189,19 @@ def _git_cmd(*args: str) -> None: LOCAL_RESOURCES = ( 'Cargo.toml', 'main.go', 'go.mod', 'main.rs', '.npmignore', 'package.json', 'pre_commit_dummy_package.gemspec', 'setup.py', - 'environment.yml', 'Makefile.PL', 'renv.lock', + 'environment.yml', 'Makefile.PL', + 'renv.lock', 'renv/activate.R', 'renv/LICENSE.renv', ) def make_local(self, deps: Sequence[str]) -> str: def make_local_strategy(directory: str) -> None: for resource in self.LOCAL_RESOURCES: - contents = resource_text(f'empty_template_{resource}') - with open(os.path.join(directory, resource), 'w') as f: + resource_dirname, resource_basename = os.path.split(resource) + contents = resource_text(f'empty_template_{resource_basename}') + target_dir = os.path.join(directory, resource_dirname) + target_file = os.path.join(target_dir, resource_basename) + os.makedirs(target_dir, exist_ok=True) + with open(target_file, 'w') as f: f.write(contents) env = git.no_git_env() diff --git a/testing/resources/r_hooks_repo/renv/LICENSE b/testing/resources/r_hooks_repo/renv/LICENSE new file mode 100644 index 000000000..253c5d1ab --- /dev/null +++ b/testing/resources/r_hooks_repo/renv/LICENSE @@ -0,0 +1,7 @@ +Copyright 2021 RStudio, PBC + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/testing/resources/r_hooks_repo/renv/activate.R b/testing/resources/r_hooks_repo/renv/activate.R new file mode 100644 index 000000000..d8d092cc6 --- /dev/null +++ b/testing/resources/r_hooks_repo/renv/activate.R @@ -0,0 +1,440 @@ + +local({ + + # the requested version of renv + version <- "0.12.5" + + # the project directory + project <- getwd() + + # avoid recursion + if (!is.na(Sys.getenv("RENV_R_INITIALIZING", unset = NA))) + return(invisible(TRUE)) + + # signal that we're loading renv during R startup + Sys.setenv("RENV_R_INITIALIZING" = "true") + on.exit(Sys.unsetenv("RENV_R_INITIALIZING"), add = TRUE) + + # signal that we've consented to use renv + options(renv.consent = TRUE) + + # load the 'utils' package eagerly -- this ensures that renv shims, which + # mask 'utils' packages, will come first on the search path + library(utils, lib.loc = .Library) + + # check to see if renv has already been loaded + if ("renv" %in% loadedNamespaces()) { + + # if renv has already been loaded, and it's the requested version of renv, + # nothing to do + spec <- .getNamespaceInfo(.getNamespace("renv"), "spec") + if (identical(spec[["version"]], version)) + return(invisible(TRUE)) + + # otherwise, unload and attempt to load the correct version of renv + unloadNamespace("renv") + + } + + # load bootstrap tools + bootstrap <- function(version, library) { + + # attempt to download renv + tarball <- tryCatch(renv_bootstrap_download(version), error = identity) + if (inherits(tarball, "error")) + stop("failed to download renv ", version) + + # now attempt to install + status <- tryCatch(renv_bootstrap_install(version, tarball, library), error = identity) + if (inherits(status, "error")) + stop("failed to install renv ", version) + + } + + renv_bootstrap_tests_running <- function() { + getOption("renv.tests.running", default = FALSE) + } + + renv_bootstrap_repos <- function() { + + # check for repos override + repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) + if (!is.na(repos)) + return(repos) + + # if we're testing, re-use the test repositories + if (renv_bootstrap_tests_running()) + return(getOption("renv.tests.repos")) + + # retrieve current repos + repos <- getOption("repos") + + # ensure @CRAN@ entries are resolved + repos[repos == "@CRAN@"] <- "https://cloud.r-project.org" + + # add in renv.bootstrap.repos if set + default <- c(CRAN = "https://cloud.r-project.org") + extra <- getOption("renv.bootstrap.repos", default = default) + repos <- c(repos, extra) + + # remove duplicates that might've snuck in + dupes <- duplicated(repos) | duplicated(names(repos)) + repos[!dupes] + + } + + renv_bootstrap_download <- function(version) { + + # if the renv version number has 4 components, assume it must + # be retrieved via github + nv <- numeric_version(version) + components <- unclass(nv)[[1]] + + methods <- if (length(components) == 4L) { + list( + renv_bootstrap_download_github + ) + } else { + list( + renv_bootstrap_download_cran_latest, + renv_bootstrap_download_cran_archive + ) + } + + for (method in methods) { + path <- tryCatch(method(version), error = identity) + if (is.character(path) && file.exists(path)) + return(path) + } + + stop("failed to download renv ", version) + + } + + renv_bootstrap_download_impl <- function(url, destfile) { + + mode <- "wb" + + # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 + fixup <- + Sys.info()[["sysname"]] == "Windows" && + substring(url, 1L, 5L) == "file:" + + if (fixup) + mode <- "w+b" + + utils::download.file( + url = url, + destfile = destfile, + mode = mode, + quiet = TRUE + ) + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + repos <- renv_bootstrap_download_cran_latest_find(version) + + message("* Downloading renv ", version, " from CRAN ... ", appendLF = FALSE) + + info <- tryCatch( + utils::download.packages( + pkgs = "renv", + repos = repos, + destdir = tempdir(), + quiet = TRUE + ), + condition = identity + ) + + if (inherits(info, "condition")) { + message("FAILED") + return(FALSE) + } + + message("OK") + info[1, 2] + + } + + renv_bootstrap_download_cran_latest_find <- function(version) { + + all <- renv_bootstrap_repos() + + for (repos in all) { + + db <- tryCatch( + as.data.frame( + x = utils::available.packages(repos = repos), + stringsAsFactors = FALSE + ), + error = identity + ) + + if (inherits(db, "error")) + next + + entry <- db[db$Package %in% "renv" & db$Version %in% version, ] + if (nrow(entry) == 0) + next + + return(repos) + + } + + fmt <- "renv %s is not available from your declared package repositories" + stop(sprintf(fmt, version)) + + } + + renv_bootstrap_download_cran_archive <- function(version) { + + name <- sprintf("renv_%s.tar.gz", version) + repos <- renv_bootstrap_repos() + urls <- file.path(repos, "src/contrib/Archive/renv", name) + destfile <- file.path(tempdir(), name) + + message("* Downloading renv ", version, " from CRAN archive ... ", appendLF = FALSE) + + for (url in urls) { + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (identical(status, 0L)) { + message("OK") + return(destfile) + } + + } + + message("FAILED") + return(FALSE) + + } + + renv_bootstrap_download_github <- function(version) { + + enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") + if (!identical(enabled, "TRUE")) + return(FALSE) + + # prepare download options + pat <- Sys.getenv("GITHUB_PAT") + if (nzchar(Sys.which("curl")) && nzchar(pat)) { + fmt <- "--location --fail --header \"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "curl", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { + fmt <- "--header=\"Authorization: token %s\"" + extra <- sprintf(fmt, pat) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "wget", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } + + message("* Downloading renv ", version, " from GitHub ... ", appendLF = FALSE) + + url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) + name <- sprintf("renv_%s.tar.gz", version) + destfile <- file.path(tempdir(), name) + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (!identical(status, 0L)) { + message("FAILED") + return(FALSE) + } + + message("OK") + return(destfile) + + } + + renv_bootstrap_install <- function(version, tarball, library) { + + # attempt to install it into project library + message("* Installing renv ", version, " ... ", appendLF = FALSE) + dir.create(library, showWarnings = FALSE, recursive = TRUE) + + # invoke using system2 so we can capture and report output + bin <- R.home("bin") + exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" + r <- file.path(bin, exe) + args <- c("--vanilla", "CMD", "INSTALL", "-l", shQuote(library), shQuote(tarball)) + output <- system2(r, args, stdout = TRUE, stderr = TRUE) + message("Done!") + + # check for successful install + status <- attr(output, "status") + if (is.numeric(status) && !identical(status, 0L)) { + header <- "Error installing renv:" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- c(header, lines, output) + writeLines(text, con = stderr()) + } + + status + + } + + renv_bootstrap_prefix <- function() { + + # construct version prefix + version <- paste(R.version$major, R.version$minor, sep = ".") + prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") + + # include SVN revision for development versions of R + # (to avoid sharing platform-specific artefacts with released versions of R) + devel <- + identical(R.version[["status"]], "Under development (unstable)") || + identical(R.version[["nickname"]], "Unsuffered Consequences") + + if (devel) + prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") + + # build list of path components + components <- c(prefix, R.version$platform) + + # include prefix if provided by user + prefix <- Sys.getenv("RENV_PATHS_PREFIX") + if (nzchar(prefix)) + components <- c(prefix, components) + + # build prefix + paste(components, collapse = "/") + + } + + renv_bootstrap_library_root_name <- function(project) { + + # use project name as-is if requested + asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") + if (asis) + return(basename(project)) + + # otherwise, disambiguate based on project's path + id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) + paste(basename(project), id, sep = "-") + + } + + renv_bootstrap_library_root <- function(project) { + + path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) + if (!is.na(path)) + return(path) + + path <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) + if (!is.na(path)) { + name <- renv_bootstrap_library_root_name(project) + return(file.path(path, name)) + } + + file.path(project, "renv/library") + + } + + renv_bootstrap_validate_version <- function(version) { + + loadedversion <- utils::packageDescription("renv", fields = "Version") + if (version == loadedversion) + return(TRUE) + + # assume four-component versions are from GitHub; three-component + # versions are from CRAN + components <- strsplit(loadedversion, "[.-]")[[1]] + remote <- if (length(components) == 4L) + paste("rstudio/renv", loadedversion, sep = "@") + else + paste("renv", loadedversion, sep = "@") + + fmt <- paste( + "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", + "Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", + "Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", + sep = "\n" + ) + + msg <- sprintf(fmt, loadedversion, version, remote) + warning(msg, call. = FALSE) + + FALSE + + } + + renv_bootstrap_hash_text <- function(text) { + + hashfile <- tempfile("renv-hash-") + on.exit(unlink(hashfile), add = TRUE) + + writeLines(text, con = hashfile) + tools::md5sum(hashfile) + + } + + renv_bootstrap_load <- function(project, libpath, version) { + + # try to load renv from the project library + if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) + return(FALSE) + + # warn if the version of renv loaded does not match + renv_bootstrap_validate_version(version) + + # load the project + renv::load(project) + + TRUE + + } + + # construct path to library root + root <- renv_bootstrap_library_root(project) + + # construct library prefix for platform + prefix <- renv_bootstrap_prefix() + + # construct full libpath + libpath <- file.path(root, prefix) + + # attempt to load + if (renv_bootstrap_load(project, libpath, version)) + return(TRUE) + + # load failed; inform user we're about to bootstrap + prefix <- paste("# Bootstrapping renv", version) + postfix <- paste(rep.int("-", 77L - nchar(prefix)), collapse = "") + header <- paste(prefix, postfix) + message(header) + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + message("* Successfully installed and loaded renv ", version, ".") + return(renv::load()) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + +}) diff --git a/tests/store_test.py b/tests/store_test.py index 0947144ed..5a5d69e0f 100644 --- a/tests/store_test.py +++ b/tests/store_test.py @@ -186,7 +186,7 @@ def test_local_resources_reflects_reality(): for res in os.listdir('pre_commit/resources') if res.startswith('empty_template_') } - assert on_disk == set(Store.LOCAL_RESOURCES) + assert on_disk == {os.path.basename(x) for x in Store.LOCAL_RESOURCES} def test_mark_config_as_used(store, tmpdir): From 788aec156f6246dcb0052aaeb2494d9e5b786d71 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Thu, 15 Apr 2021 08:03:37 +0200 Subject: [PATCH 123/129] local r hooks should not get prefix for path --- pre_commit/languages/r.py | 11 ++++++++--- tests/languages/r_test.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/pre_commit/languages/r.py b/pre_commit/languages/r.py index bae4001aa..d573775f7 100644 --- a/pre_commit/languages/r.py +++ b/pre_commit/languages/r.py @@ -40,14 +40,19 @@ def _get_env_dir(prefix: Prefix, version: str) -> str: return prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) -def _prefix_if_file_entry( +def _prefix_if_non_local_file_entry( entry: Sequence[str], prefix: Prefix, + src: str, ) -> Sequence[str]: if entry[1] == '-e': return entry[1:] else: - return (prefix.path(entry[1]),) + if src == 'local': + path = entry[1] + else: + path = prefix.path(entry[1]) + return (path,) def _entry_validate(entry: Sequence[str]) -> None: @@ -75,7 +80,7 @@ def _cmd_from_hook(hook: Hook) -> Tuple[str, ...]: return ( *entry[:1], *RSCRIPT_OPTS, - *_prefix_if_file_entry(entry, hook.prefix), + *_prefix_if_non_local_file_entry(entry, hook.prefix, hook.src), *hook.args, ) diff --git a/tests/languages/r_test.py b/tests/languages/r_test.py index 5c046efed..66aa7b388 100644 --- a/tests/languages/r_test.py +++ b/tests/languages/r_test.py @@ -14,10 +14,12 @@ def _test_r_parsing( hook_id, expected_hook_expr={}, expected_args={}, + config={}, + expect_path_prefix=True, ): repo_path = 'r_hooks_repo' path = make_repo(tempdir_factory, repo_path) - config = make_config_from_repo(path) + config = config or make_config_from_repo(path) hook = _get_hook_no_install(config, store, hook_id) ret = r._cmd_from_hook(hook) expected_cmd = 'Rscript' @@ -25,7 +27,8 @@ def _test_r_parsing( '--no-save', '--no-restore', '--no-site-file', '--no-environ', ) expected_path = os.path.join( - hook.prefix.prefix_dir, '.'.join([hook_id, 'R']), + hook.prefix.prefix_dir if expect_path_prefix else '', + f'{hook_id}.R', ) expected = ( expected_cmd, @@ -102,3 +105,25 @@ def test_r_parsing_expr_non_Rscirpt(tempdir_factory, store): msg = execinfo.value.args assert msg == ('entry must start with `Rscript`.',) + + +def test_r_parsing_file_local(tempdir_factory, store): + path = 'path/to/script.R' + hook_id = 'local-r' + config = { + 'repo': 'local', + 'hooks': [{ + 'id': hook_id, + 'name': 'local-r', + 'entry': f'Rscript {path}', + 'language': 'r', + }], + } + _test_r_parsing( + tempdir_factory, + store, + hook_id=hook_id, + expected_hook_expr=(path,), + config=config, + expect_path_prefix=False, + ) From b9c2c477ccd2bacffee763fa2bd205b011e3e07c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 20:19:33 +0000 Subject: [PATCH 124/129] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/PyCQA/flake8: 3.9.1 → 3.9.2](https://github.com/PyCQA/flake8/compare/3.9.1...3.9.2) - [github.com/asottile/pyupgrade: v2.14.0 → v2.15.0](https://github.com/asottile/pyupgrade/compare/v2.14.0...v2.15.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 329137527..ffb5b6580 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,7 @@ repos: - id: requirements-txt-fixer - id: double-quote-string-fixer - repo: https://github.com/PyCQA/flake8 - rev: 3.9.1 + rev: 3.9.2 hooks: - id: flake8 additional_dependencies: [flake8-typing-imports==1.10.0] @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.14.0 + rev: v2.15.0 hooks: - id: pyupgrade args: [--py36-plus] From 3922263f8c7e459379bd376d744b07bf1c74d8e7 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 14 May 2021 19:11:05 -0700 Subject: [PATCH 125/129] Use more inclusive language Committed via https://github.com/asottile/all-repos --- CHANGELOG.md | 2 +- pre_commit/resources/empty_template_Makefile.PL | 2 +- pre_commit/resources/empty_template_go.mod | 2 +- pre_commit/resources/empty_template_package.json | 2 +- ...empty_template_pre_commit_dummy_package.gemspec | 6 ------ ...template_pre_commit_placeholder_package.gemspec | 6 ++++++ pre_commit/resources/empty_template_setup.py | 2 +- pre_commit/store.py | 2 +- tests/commands/run_test.py | 14 +++++++------- tests/conftest.py | 4 ++-- tests/languages/ruby_test.py | 8 ++++---- 11 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 pre_commit/resources/empty_template_pre_commit_dummy_package.gemspec create mode 100644 pre_commit/resources/empty_template_pre_commit_placeholder_package.gemspec diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f154c447..50492dfb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1444,7 +1444,7 @@ that have helped us get this far! 0.13.1 - 2017-02-16 =================== -- Fix dummy gem for ruby local hooks +- Fix placeholder gem for ruby local hooks 0.13.0 - 2017-02-16 =================== diff --git a/pre_commit/resources/empty_template_Makefile.PL b/pre_commit/resources/empty_template_Makefile.PL index ac75fe531..45a0ba377 100644 --- a/pre_commit/resources/empty_template_Makefile.PL +++ b/pre_commit/resources/empty_template_Makefile.PL @@ -1,6 +1,6 @@ use ExtUtils::MakeMaker; WriteMakefile( - NAME => "PreCommitDummy", + NAME => "PreCommitPlaceholder", VERSION => "0.0.1", ); diff --git a/pre_commit/resources/empty_template_go.mod b/pre_commit/resources/empty_template_go.mod index de3e24157..892c4e59d 100644 --- a/pre_commit/resources/empty_template_go.mod +++ b/pre_commit/resources/empty_template_go.mod @@ -1 +1 @@ -module pre-commit-dummy-empty-module +module pre-commit-placeholder-empty-module diff --git a/pre_commit/resources/empty_template_package.json b/pre_commit/resources/empty_template_package.json index ac7b72592..042e9583c 100644 --- a/pre_commit/resources/empty_template_package.json +++ b/pre_commit/resources/empty_template_package.json @@ -1,4 +1,4 @@ { - "name": "pre_commit_dummy_package", + "name": "pre_commit_placeholder_package", "version": "0.0.0" } diff --git a/pre_commit/resources/empty_template_pre_commit_dummy_package.gemspec b/pre_commit/resources/empty_template_pre_commit_dummy_package.gemspec deleted file mode 100644 index 8bfb40cad..000000000 --- a/pre_commit/resources/empty_template_pre_commit_dummy_package.gemspec +++ /dev/null @@ -1,6 +0,0 @@ -Gem::Specification.new do |s| - s.name = 'pre_commit_dummy_package' - s.version = '0.0.0' - s.summary = 'dummy gem for pre-commit hooks' - s.authors = ['Anthony Sottile'] -end diff --git a/pre_commit/resources/empty_template_pre_commit_placeholder_package.gemspec b/pre_commit/resources/empty_template_pre_commit_placeholder_package.gemspec new file mode 100644 index 000000000..630f0d4da --- /dev/null +++ b/pre_commit/resources/empty_template_pre_commit_placeholder_package.gemspec @@ -0,0 +1,6 @@ +Gem::Specification.new do |s| + s.name = 'pre_commit_placeholder_package' + s.version = '0.0.0' + s.summary = 'placeholder gem for pre-commit hooks' + s.authors = ['Anthony Sottile'] +end diff --git a/pre_commit/resources/empty_template_setup.py b/pre_commit/resources/empty_template_setup.py index 68860648b..ef05eef84 100644 --- a/pre_commit/resources/empty_template_setup.py +++ b/pre_commit/resources/empty_template_setup.py @@ -1,4 +1,4 @@ from setuptools import setup -setup(name='pre-commit-dummy-package', version='0.0.0') +setup(name='pre-commit-placeholder-package', version='0.0.0') diff --git a/pre_commit/store.py b/pre_commit/store.py index 494e688f1..0fd5e6238 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -188,7 +188,7 @@ def _git_cmd(*args: str) -> None: LOCAL_RESOURCES = ( 'Cargo.toml', 'main.go', 'go.mod', 'main.rs', '.npmignore', - 'package.json', 'pre_commit_dummy_package.gemspec', 'setup.py', + 'package.json', 'pre_commit_placeholder_package.gemspec', 'setup.py', 'environment.yml', 'Makefile.PL', 'renv.lock', 'renv/activate.R', 'renv/LICENSE.renv', ) diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 8dcb5796b..e184340c2 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -526,9 +526,9 @@ def test_merge_conflict(cap_out, store, in_merge_conflict): def test_merge_conflict_modified(cap_out, store, in_merge_conflict): # Touch another file so we have unstaged non-conflicting things - assert os.path.exists('dummy') - with open('dummy', 'w') as dummy_file: - dummy_file.write('bar\nbaz\n') + assert os.path.exists('placeholder') + with open('placeholder', 'w') as placeholder_file: + placeholder_file.write('bar\nbaz\n') ret, printed = _do_run(cap_out, store, in_merge_conflict, run_opts()) assert ret == 1 @@ -831,9 +831,9 @@ def test_local_hook_passes(cap_out, store, repo_with_passing_hook): } add_config_to_repo(repo_with_passing_hook, config) - with open('dummy.py', 'w') as staged_file: + with open('placeholder.py', 'w') as staged_file: staged_file.write('"""TODO: something"""\n') - cmd_output('git', 'add', 'dummy.py') + cmd_output('git', 'add', 'placeholder.py') _test_run( cap_out, @@ -858,9 +858,9 @@ def test_local_hook_fails(cap_out, store, repo_with_passing_hook): } add_config_to_repo(repo_with_passing_hook, config) - with open('dummy.py', 'w') as staged_file: + with open('placeholder.py', 'w') as staged_file: staged_file.write('"""TODO: something"""\n') - cmd_output('git', 'add', 'dummy.py') + cmd_output('git', 'add', 'placeholder.py') _test_run( cap_out, diff --git a/tests/conftest.py b/tests/conftest.py index b36ce5ac5..f38f9693c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -90,8 +90,8 @@ def _make_conflict(): @pytest.fixture def in_merge_conflict(tempdir_factory): path = make_consuming_repo(tempdir_factory, 'script_hooks_repo') - open(os.path.join(path, 'dummy'), 'a').close() - cmd_output('git', 'add', 'dummy', cwd=path) + open(os.path.join(path, 'placeholder'), 'a').close() + cmd_output('git', 'add', 'placeholder', cwd=path) git_commit(msg=in_merge_conflict.__name__, cwd=path) conflict_path = tempdir_factory.get() diff --git a/tests/languages/ruby_test.py b/tests/languages/ruby_test.py index 0c6cfede4..7dff0466b 100644 --- a/tests/languages/ruby_test.py +++ b/tests/languages/ruby_test.py @@ -36,13 +36,13 @@ def test_uses_system_if_both_gem_and_ruby_are_available(find_exe_mck): def fake_gem_prefix(tmpdir): gemspec = '''\ Gem::Specification.new do |s| - s.name = 'pre_commit_dummy_package' + s.name = 'pre_commit_placeholder_package' s.version = '0.0.0' - s.summary = 'dummy gem for pre-commit hooks' + s.summary = 'placeholder gem for pre-commit hooks' s.authors = ['Anthony Sottile'] end ''' - tmpdir.join('dummy_gem.gemspec').write(gemspec) + tmpdir.join('placeholder_gem.gemspec').write(gemspec) yield Prefix(tmpdir) @@ -53,7 +53,7 @@ def test_install_ruby_system(fake_gem_prefix): # Should be able to activate and use rbenv install with ruby.in_env(fake_gem_prefix, 'system'): _, out, _ = cmd_output('gem', 'list') - assert 'pre_commit_dummy_package' in out + assert 'pre_commit_placeholder_package' in out @xfailif_windows # pragma: win32 no cover From 7f65d2745dd5c60bf38340d7927192b17a13ecf0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 17:22:52 +0000 Subject: [PATCH 126/129] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v3.4.0 → v4.0.1](https://github.com/pre-commit/pre-commit-hooks/compare/v3.4.0...v4.0.1) - [github.com/asottile/pyupgrade: v2.15.0 → v2.16.0](https://github.com/asottile/pyupgrade/compare/v2.15.0...v2.16.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ffb5b6580..8276e5120 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.4.0 + rev: v4.0.1 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.15.0 + rev: v2.16.0 hooks: - id: pyupgrade args: [--py36-plus] From c2108d6d43c46e1286645f489a9285bdc068fd24 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 17 May 2021 20:15:00 -0700 Subject: [PATCH 127/129] make tarfile creation reproducible --- pre_commit/resources/rbenv.tar.gz | Bin 34250 -> 32142 bytes pre_commit/resources/ruby-build.tar.gz | Bin 74218 -> 68010 bytes pre_commit/resources/ruby-download.tar.gz | Bin 5533 -> 5271 bytes testing/make-archives | 36 ++++++++++++++++------ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/pre_commit/resources/rbenv.tar.gz b/pre_commit/resources/rbenv.tar.gz index 95b5a364dff06d5fc8f1176a9ee477c817942b46..7723448ec5fa447c5a369257fcd768bc58093f6b 100644 GIT binary patch literal 32142 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 V!V{kGglEIg{{j9RBvJs-0su=|IMe_D literal 34250 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 AGXMYp diff --git a/pre_commit/resources/ruby-build.tar.gz b/pre_commit/resources/ruby-build.tar.gz index ef82e2f5f53d7b35b4712e30388dff47391b8143..2d8413643b29c326e7435aebdce8036ad0368f92 100644 GIT binary patch literal 68010 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 W{Qvo3@OK|T{JLobf)m4l`+ooyzSZsk literal 74218 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

?{!SmN`Jv=Jq=lu9 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 literal 5533 zcmV;O6=LciiwFpeb!=b)|8R0;Ut@1=ZE18ba%FRGb#h~6b1!mrVtFlOZ+C8NZ((FE zbYXG;?LBQ*+qlyG>|ddp+zsi)aS{l$?56hyFpzUY!bw8Ay=^x*wvu@3*m?W{q?G;b z&x~X{j`IT9Qg(Z5o%VpGdDBQ5&5UG|m-F(!&()h#s_N8v_DxEGmt{W-h3%c`?^s_f z?vzW<$j!4SD8B2d4zPdhPJSn)^pcD`V?-;(-QwO}sjyev&F^jRmiCG}!n3se&lkt< zO(fmEwoF^qwt%hw^7i)LGg5xa^{=|N=NTql26tckce?)b zsr^swf71S!UV{DKOYQ#;XaDm9!!rh!?a;?w|GPUo%kBU6c4GbSZI`y6k-}51{~y%; zZ;&_Yz)>xa^lcM%03mM!Q9OfM79}UDV;SHP2&( z2y+sszD4>DrNr(NZKyf}x(>#PLM-TqY&*oIril~`kel^&DjkDCE@M=v7pREwy&l@5*`9!k`aTSRJEROpw?So$ z?3!j0ORSX22Jiz1=)Kv zP#Ew9^{TP%ILIE>i{%-h`?2jXe#vg;f&ZyO+Rfw6+iFW8wKh3#HQ&^Zlp`Wm+wd%I zk+-$ZY4f5(0HRfGbl#EXF{w7*k^j^hM_WYs^}MCD+oahdwX^ejO@X>vOrku>%7|{$F)uaX&wX7DmkyVI<>=# zdbLH)FIwl#wgT*rfNZ1IIBo$KHX z26p4H+32+3aSM9c>O`n-Yi(tVR9m$+D&)A;1oEg(z-TfefY(qs6;w5u84&=%=Zm&7 zmE}mO)`3kKHn&~c?`v0l_pZfo4`Cs?{TT1olOv#V*r}Y1KO2u;0|KBYYQvd&H z@_)|ND4GC*5Pw1+RJF)^r$?=;kDEi!8@v0mJOC%!@8vanB)hIh$3yUcZA)fQIWji= z0rSdLaBv;_%FrpJa>?3BNc$3;%F!tBha-mgOm93#1rHZzCg~ZL>Y(r0cLE3bee2EH zwA!I#+ciAfnM~z_F60ec4q@aRxG)y4Y5OM`r5)28(IZT`^qmsoLJO+!P1Gqybw(k(l zcN~aai93OXG1?~=Ob)^&Ae&5{+*0)g3g#VEA<*piDI<5$swWf(YUm!+8V~>|?e0Of ztyIF9Yd}=)SgM()oB^A|AU0bqkE!;1n0;4c5NIC90cO5o`7TWUGAL)|v~_wn5(itR zL&GvcQd0{yztrMj_bxZna6Oh!ftfOEBh@R_Fx8$(!?egOC#E8-4mC6eV+eI4LFk6P z4%Lhq2pj}t2Fk^pPo8vaa%Ir#7$0XAZ42`!JiDOkx%X~o^ZSnf8uj`=AVWXxlh2Shqn)4Q3#vBbQG~Hc&=v2g1EIvXSmY8RtteP_hU<;jt4W$|Rn2QS38z$0Q#3;AT(*W?=W0q~Rs$5OY!^>{A4sh;3@ z&2g=+bb(y=jnZo4c}0bYB~cIpZV*yfePiG|baM$p4$sEEaIi0eKnVXe4>6%m`vyey zB9BGHEwVp$jFAeyaOE`wUOr{0L)-NjA|d!IBKGVXlp}~?0Mhj)yE`HW>VcyN4vjkQ zx|(B*J%Ie>7pZ;Ns-1Tj0D%|)PshlSa!{)_y2q_%qoXvADwb`rkO{&A_SO(JGCxvLKm0dys|1Y`6`Hyk33 z=Q1ooyJ->0C30|I?VdagA_OBeGtewW#X=s@9a7W8Ibv8Q&Kj5^$&uz0=n7;UKvV<( zebsbPUTWzA{!jhC)c;HUzqEX({vQ}|`P;1j_1^#4Ef&)Ee^UFO+W*x4r{#(5KXam^ zswc4j<#IW({$U#K?xpenlf?heW#4t!z+*(#Q{ADk0kMADA7PxlPokr(*|R1H&8X&? zlSRjacu_PsPy$NR`aGk|PQv$-XKBHy&jty~>a+1>V0a?;OK>O^gGPAH0CDR06XWIS zK}7)SE;zg3$B6kUODxCJ9ujRxwNLDXY~^8BUJx*$B2nQzks#X4v<{TUo9>ZvaB(7% zkL0JHSi(iR!AwhYj7KG^xlgJ+jJNULGVxJygoUQp5Umr9oeuIg!-Bxt(242{*zIXl z{3dALR5eNtn`dWuxs^fUnT@56Xmk-fxQCGwj6MO;K7(jQ5a?%ww1hy#62!)1&>@#0 z()a71Fu_1?AdD{xeM1oD&!scBb9MWYxa6*ecsEPoyn6Vb>WR`lZz;#MUz4$@#o&8amcFm{d0(*MFbag>cOh)@;NK8!^&>Z?0%xjVVzDW3BfTIwvO&VbYL-KpA8avL0O5G%qm>}eV*>@s%P=X zAi)@`skRPJ?_@DSH4rbV0NK>*Pb7Ogb_@$MqNaUKoy|-kcNd7r(sYtrhoOzIL_ix; zthY>><*1n=fn_gthW3y_h1Xb&#kW{M?u&zW%LUISB!9?Nm)Wr-vm-|~=f*ZC z&RcM5xxPcY{B7VaG`OCNyVcaDg083omLh~P`Wy@u69dDkGG}n^L?PTfx-g2}U=+LI z-GP}o5oa3MrWIq&O%>k*2w(T09I%=9%E^3-gu2BC_9n77Q}eYpbA~2=g#Zs5j#>NK zH*UIMHM;{k>h|yi!SA_iunf@+r?;M_m|1e@$iAXo+*@@zreFar4ZX^TQCep%%nS)% zn9+r+q-~hLdKDYr7fBkEb?{lQ)BI1G|4H*dY5Du+e=wN%o8;9%SAG9$uTW0r|98si_rIPh|Bt!5Ne0@;$7xobkkJ)p_ZU>)U_vd(yeyC@x)wK;D&7Cn z{XgCR)AA_$fASRSoA3X{onqqqpQU1HrT!uvDOJZ1_O)lB*!M2UNwwU3P1PAo*$#WvrKW~yPx^3}0_<{Qq^+uRpyU*uQaWhTai-{c!tQh9m zQIi2!1V=4A9{cI_)MNbeg>g+F09P@3?*Y}|ni6`8)L|O<<25Pe3t1p(*^;B%TJW2( zh%~+jf|CD`_CNLiQvWaY|5E=i=KrzFM324xSNVV2dvou9mdfSS|NATazvIa7bEwHa z$O?WD-j%twolkw!zGi+7Y{k)S6#lsvytUY3r}~7#Ha=lEGiUpz@re?bJ7I1}m8US= z@Pj4cM5H=i9K|zs4v=4VV_?R`V5jl%REdu-@_k}R*oN+2SHr71!Bw(pT4#ev!`l!n zCJE-gLTr>X%P!0^j<{C1XUZ_Ms2d=~6%gGi4L(_eS4cZU_E}f1V#52xI?g=P9`&yA z`ar~u%Y(O_P`YVVURc_*)e7O&3^1%0gIf&z@s67SsNns2!Fwh~K5?C7;^;FTFoVFC zJHeM=9hw2niKJ2?;!^F+dedZ9%FL$eCdkFyWeN1I(S&5+uk%#dOm%R1C3IJRc>ACF zf2seM`hThaH{<_JFT6j2|5x1I-rY-{|LvC3@BjbB{vV$Mc-=UB!zXwfL9=!4lyGlC zH4W7b96)_Re0R_-gN^wnJ5|-_x|>9_^_z|4xHDJ;j!Np3w|mirA=c3*Eqt zjJ+$dnG@LIqJ{6^1a)0+GN#c3d;21M2oqJ|v+8I=A^PgapT-X#4Xba1W40N7BGqTe zlA04^KuEnJ`WAj(#fmo|@Y04ZyI7AGXcvNnFI+5YLm?MPHDXe+E4j(WoX9WY60%u0 zEdS=qN#o*0=(x@HgSCf=NuwVnHSzScPh{$8vg!6D2uj%Z>ONvVHUc_nDd*khIezWF zT@gj{fu%ylqguPusvUG|M-~2sIdPuQG#waFi+P|)l?FuSS|g=pHt{6}={Q@-l5D0} zsYD{Ql)6%FD`N0|L#A|>os%UuPdQXM(Z`<#;O8=I32P0UyuL$8ghkEAR~s9ZGvN7^ znqwq>AibTb*6*rg^GW@cs^g@-z4n&rK{Y)S`w>&d{Zdy!)hk2>KSPrsrqlIU*8dCn zz}^9Bv?`S%31w~^gU~^fbexY~5y}+Byof!zw*$7j-Z;Ye*<-wn;Zkvq!a76O1S)MG z^uNy71@Gp-ED~=AuHV~~MR`jUb3Z4?a4Hm-*^TTyNtDVEsy7ES;L*rQWVAW!i(l`poKfr*oX3fy~U*Cf}+r zxD39_-F)oWXkxDnjk*t7kGKXzcVgK+!*<04frqU^9-bVukHls3708?RVDfiycluPf z9d)hoJ!U9hV`CxtFQWLVomC7djV$H_f zxTje_>=Y<^zn75Bwr@4ti_;UVNfZ{Yf7?_Y!%a5EG?z%2T;-CmOEN3t+~S0Yn7K`G zxf4m{5AxgZ_5^0di--C5Bh|TQ9VNMJydZbWR>D%5?2!ew_hB+M0rn|GGG4$+Sl(`! zrayYH%n;<&EFC;x^;-+h-pw$y`{at477OcgC>9@1yciPSz`sF(>zBED!Cwpc*Rn-+ z>`)53>EdM;+h!9x6vuk_B6D)fVUvCT$3LVO(O`sf;<&CaXMpu*+6UkE#b^ROSGP-oBVS!w~I*KJ!~(Cl&?D1hPAjuylu(2w|`wBpL@-o zz@j_0?rYwgRq26cq8+|Fd0T5NNuR$pEZx3#7Ylbd8N>t+>7CUYCvX1@xiiBWTqmhT zgd7UdwMB~YcJ}p)B#-HM;j=8iCm-aGa`$fjC}RqV&&wg>XB%^q0s+`$@EmYhs?vWy zX5ptQeg2ruEj$64n@@`w2YdHz{CN#Xb)@fxe;(_8Xybjcw7pZ_-Fx}!)fxoS diff --git a/testing/make-archives b/testing/make-archives index b2b288cfa..ae00d60b6 100755 --- a/testing/make-archives +++ b/testing/make-archives @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import argparse +import gzip import os.path import shutil import subprocess @@ -24,15 +25,14 @@ REPOS = ( ) +def reset(tarinfo: tarfile.TarInfo) -> tarfile.TarInfo: + tarinfo.uid = tarinfo.gid = 0 + tarinfo.uname = tarinfo.gname = 'root' + tarinfo.mtime = 0 + return tarinfo + + def make_archive(name: str, repo: str, ref: str, destdir: str) -> str: - """Makes an archive of a repository in the given destdir. - - :param text name: Name to give the archive. For instance foo. The file - that is created will be called foo.tar.gz. - :param text repo: Repository to clone. - :param text ref: Tag/SHA/branch to check out. - :param text destdir: Directory to place archives in. - """ output_path = os.path.join(destdir, f'{name}.tar.gz') with tempfile.TemporaryDirectory() as tmpdir: # this ensures that the root directory has umask permissions @@ -47,8 +47,24 @@ def make_archive(name: str, repo: str, ref: str, destdir: str) -> str: # runtime shutil.rmtree(os.path.join(gitdir, '.git')) - with tarfile.open(output_path, 'w|gz') as tf: - tf.add(gitdir, name) + arcs = [(name, gitdir)] + for root, dirs, filenames in os.walk(gitdir): + for filename in dirs + filenames: + abspath = os.path.abspath(os.path.join(root, filename)) + relpath = os.path.relpath(abspath, gitdir) + arcs.append((os.path.join(name, relpath), abspath)) + arcs.sort() + + with gzip.GzipFile(output_path, 'wb', mtime=0) as gzipf: + # https://github.com/python/typeshed/issues/5491 + with tarfile.open(fileobj=gzipf, mode='w') as tf: # type: ignore + for arcname, abspath in arcs: + tf.add( + abspath, + arcname=arcname, + recursive=False, + filter=reset, + ) return output_path From 14afbc7ad666d01116e4f7bfd1890facf10fb849 Mon Sep 17 00:00:00 2001 From: Jamie Alessio Date: Sat, 15 May 2021 14:22:13 -0700 Subject: [PATCH 128/129] Update rbenv / ruby-build --- pre_commit/resources/rbenv.tar.gz | Bin 32142 -> 32678 bytes pre_commit/resources/ruby-build.tar.gz | Bin 68010 -> 68689 bytes testing/make-archives | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pre_commit/resources/rbenv.tar.gz b/pre_commit/resources/rbenv.tar.gz index 7723448ec5fa447c5a369257fcd768bc58093f6b..98b7e0f60d5437171a82991b983ac52455a328a7 100644 GIT binary patch literal 32678 zcmV(^K-Iq=iwFn+00002|8inwZgwtoVR8WMz3p1tNVYIKf1|6YHuM;1%f>)ph7Oq! zARYD)$OB}$`z0A$wq>lrmfVsIp%eD={y5KbZs7fM{+??&SF*3T}hqRqMOrjvt;k{`5uvEyBOG$B*eR{LB9>{%$Tcmz#eQkNuxS$`N^B#p1T{*NCotv;;( z*IfT@P`?}vKi~SVuB=R5|Fy-H-1@Jst~~yeSbSLjFa9s|M*h0k+I6CEU7U<3$)G02 zli{!x`@c;5Bz@;N|B5=vx+6qq5)6CzLx^}1CN9>P{qRAIyfhBp*P}#SUD4MhjlI-A zz2ve&7En(@gkBn)`z`-{3SCyKHBoI=-|4SW0&gdsNtjODA+(dEHE5xGa3r6&r0mEa zC)}1#rA>i-8@18}I^x656{LVAo4Pm{9L(%clM0N?2Sr@PYM0Xg4zHr^1 zKTZdtDF$f@%{LmnIqKbL)JU+)fgdJO*uW-m<5=w;HdM%vUng*{b0U#MneU=WS`PV8TB39kQqG8&7Q z@`LC{@n|yiY)WD6==|=@_U|Z2hTeIj0}Z;WCs#J;^5%Ya-mI_aJr(rVMdh1r6sBGf zCUbJH#(p2jid&tph#8Tb1!FOeeTmbFu6qH6v)w7wz+IjcZ4Ld^+Q>p|9lUzAdwjfe z*g8J=`_4Y^2gj<@7zQ2xz29vt)O(lk8w$kT#w+j4?*~Jl zpBCzo(>V2^!9P9x`#0eK&x29i{gV2h>-PWR%5q-*Us_pv*#CF&FY!}228TVS{@-n= zUEf%!(Qa=nJnY~<{{G)O*xqR!yl8D5>~Fu>Ig!c*aeA{zT4{OySge+Y6jz6CrB;wT*XAqeyrzVH&Kn{}N~=@Ibo$j1W_5@YI0 zq!GM5!v@A)oCe)s?4b|W`@Zns zk70m**!7Xq7e3IsOOW_$BKA+cxHt5Z1SjI1!mCcyyL6J^SNPcr60Z{sq0O4`(?JMh zz@Mjn*z;o%^q_s}55^BY0636<*2ECnA7Xo1w>2lE!F${oyiV{zc;m4TW5p68_UOO< zFgT@VV4#WregdV;o}36JJD2s4|3kcDw$V#s*_f(ijjC`{~93;z2Tk z(l4U!ga!o|ae=c75|}O^WS^$%XZQexj|R~NVd4mIXmAO$zd&G#2nw2*GxA3rSQ;CM zlaPnwb%uTh(avRtmN*|1TF1~m2(?(5R}iqNr=f%k8;syb%&0R78LqxsZZA!7yZXt*0qhCRS052w-r#OU~h5wIa* zA2AU2PaMI(cw7QC5AdSTI}yeLOb&uc?~_A7Osr44Ism9TuO%5V36K~2gu+yE$TXun z^x~j@i2ylBuSz_2#zp0iGhb`6ZgErjTR+k~G*fvfX0fU6z?`5O&7{60$Ed)wNq!8MrpKxe~ zX&rWGRvIZ_-)|q`57Dz)~H57+uuG=5PpX5v-|4 z=Oc(_LnL>xkB6q5We}dj5f=c#moKOkzza?TqJJWz8G!l@pcEoL6b^luXyVBu$D~2D z3xTW#ad$G35UJAY zI-Iy+8d-ij!+cJosOJDthFM^5eGiLDGIUAjr6NK&FCU;rhfRWb5A(nyEo4j}giJ``ifNO&_Emk zv-h%%7>gFo!#K9TV>JB`An79WpPHZ2UwKJ%E^cVT(baA&YWCJ}{wVVQ-tN}U{?X3Y(f=(it}NyCf6e8U2l@Xl z{%u9$OXdgXy7OWQK%XNuKvFe-j(Z!3nGaO$6vS27;x$2%HEe&N9x)2el1pX5Lqr{< zVaR)Xa72tRnf^gDNz_j-kQJnZC?ReFNk$I@x{*Hj(V&osIUpfUlADJaq zL#R($wm_Xk9CTSYVV(!apgs=+;9$82%@30>4B}di##s}i2n1IA>(jKxED6<|UXV!f z8O0uC<^W7S@w^R^)!`_H76M<>dNn%ci_?hsSC)GcJTahOIH5-NOaMf{;Dpd6AGC0O zB@y+=hjHX!aX!wZgbX}5os`v?2G`!5cmmz`HT`^Rb?m=5eSlKLGe^CGb2k8F~cQ&_Q z?R;jn|1Hn|l{GkY3jV(j_W!%m|Nj6p8;MI)o`XR6KmYsxNyOmo8JAhLM zBqbCpP|q!10K8qFA(5K`~cI45J^UV5yP zaXORX&`+TkR8jlmVRT7)E|}-S!t3b5k5PRM2ca>}`U1#fB%ogEc~%n}1`(0kl8oPzOMZ?j{pby0BU{Apc6TK9OWjlZeJiUHqsqm1d_<1Kn3qaSHqkPb=rw z$z+iKiyFJk?>AY`4Rfeq_w-fHm`UWW-a~|b&zS= z8u)$SNV~xp)hrIWk|h(E1U7Vz>i(fr4QtgbtTe)s^)Durp)%ko8lJ-LC9KrBpO7I8 z)^a=qK>W}D{y*79{y#}%p}IiBK?fE82t!oKr_m_r)=1|jNEHc{MFPO=4m3{Davg-Y z;?npt#6@Bd2dIn$Opj650n6zRrRIkl!3sEh=u0;zc2Vn*1gN%T6GiOzfK?~d0M0B% zjXygj3BMa9mr3f61Z>fSVJ}ceM2b*^crpnj9l=$Jiko-ra7-MY>>doqU*8}tHn#9dCmB~t6 z$qIS6L!}PBcX{Pp<@r8O-m2Ia(E!@Kh>lPl`%y1le2I09^1TcKsGTN-tyald8;V-$ zW$?h_Zq#>maSOz19*7@|g0L88NWx&p(T)XicQ}+N!#jdXxLCr)5-ydH?MOH)GGmS^ z(4UGUD6NamiY4{%wZ_6=dViDfx*qejX=;U9_>%BvOCHjPJ{|B~AMuvoxv_dD+hsT+ zQXAZDtmrbseB=;OzaQ5WT1=iqg8^;zPbQC z<-SXxr~(WR_`XxZaNv*)0`2PeRAW2i>!6&$A zBoiptDv@S3Bu$RV!UW;J_{h%?zl}7oUCV3-i8Ov&$3H+ybbL6drG11g40&E#n*O~c zfmSY+R}2lv8%E)&ql`UlZssmbB1M*n8BrwCj`O2p6M#oSK1Z{Yz%;fI@7u`ov}5ng zhuQEc45uX%6h6$I#P?$2XwyL)O#qmlCNsSNM}*ETq!;T4s2vOq{*RbwB4jK>psPOe zNkLNDhGvnbFryA^lp#P-fuAU(5B#=n;6mysU(Vw3ZD0J~1}L2-bk7f?h}zLj9!y2I4ZaF|vUha0AYJ5)!0R zjs}em2Z;lGR@d*5_ftfyYshwTWFBR8U@U<@3t2(vvuU|TTu0lUUEAndnJBY)1Tn^J zrHCnQ1%@^n+UW&8lp+|N>y9J0IBqz>cuEL7wTB!q~!X9M3EK~Di}#i?R#ZpOlXTIj458~WaA_gDYDb#Y-Ujh;en6< z&GQ$z{h%MU*QG26e0)2IJAj*QIE(O)+*|NB7$)=sw;gYKz!%!S1WQ7%AtKU+PjZDx zgJ|~<8-7Wo!XgwIonWC~97To>ARBBg6B~dY0J?gYHEZ)b`OVMh(qjUo)z{=Nbwmhc zl0%Z+OSV65`kw3uoxp-nN>B163r1Fv(%oTn15Hra9!lT&x;06LacL)UsHmzbN)xPD zvg42;!tJR%s6j({UOs9FpkIYm*B$}VN&!2=iGAkkKmyX@eP$4lK^rwj$^g~(u-O36 zO%^NL9E|vnox`KugZ*|Xb%e_O?5L@uWDdI_!~x*OA`z->un+AV|DZvHlA51Nx?;&n zx-T3jqu?Yar3N(t)yPHxD80nvCh8*Eb(67IoPp~ z|5FEA7$vr63{1gG7cLv449f~O zA&GZThhd{@D(Q>VF1{d_Ms(}}!ULO39(u^xS5vhWuoaYoBvc(hBg%JxEG zGNM(Je6SQ%v{1{@yS;{V6A(z=*!6s>#rYM0=-z z1xdRuUZC%eVoh)jMs&0(=SElv9k`~uq2s04TBBM2OMT59FRwKl?P(?cT3?0|OKa0g z{EK!-v%XfxMjT1x=?ozjRw4~DdVJU--1w{H(RvnZSUPJGMeNmHSU^=5JV@V7z*K)> zVLemKwSurKOAP%M@5sY{ysD!QzXxC%!SMzdMyg0;waMjL3#3?7x`?7fDB1M2=t&ck z#|~@dq~s3c56A=TSJQsq@%yOB%FDls2`p8G&^e`o^<{BaEG$qafQ1ETmuOfOnuTuY zB?T1#B*{^=SLlsph7%Q}oGHBUsSW~YT{4UR{ogPb`Z+5ooH;N@p~~na1p86yD-Tn2 zeHsD_CTk?jnz4ehP0YMh9+O9(*Sln{LHEE6xuseV=&v9Vr4zkJ)gX3@pvdWU)XV@l zG`M4}{Z+e_W3LVEIH_)s2B|@EOQC-;#MLG|=}}`jEvjx9TGe6SQfZZ}PXnZ?CDj1B zR}E8~)wbUWJYXf?P`tSGSMUQg6p`mS3Un~VLJ!FVm`ZP)PFXH&dK1~py&#;tXE#bz zMBA-GaV#{XG6QyDJ=uJ7sL(UR8gCNUJynz(!_@Sp!jue8iY27}F6G&!259na*vCY( zi-C%EKm?Fw0@Qz>khk^N8VSD24F&jN|9yQt7&mY>tv4V+wGMp>?*QsLlc~O1Fs_zX z1-8@_=9%3(0+wwu);zzl&&&3TDkc+RAkgv03--8VH9ENh+tUNwJW0%s6d_6d(^zRx zZ&C*`m$fxS-8PN#n2tU;(}5T6LHFd5PBBS{-6ZoSQuERsc;P9MG^U5b@ArWmGfM*0 zoY@R7%?K+x&HC~1QpjPeb)ywh+WuaIB>hHxzdE8o0tFtVfdVCpp$)Tm_?hvIKE~Hg-9- zI`KkVl$=QGo1+XF+hx=^%V%^wKrr)%R*+eQTO5ozR&jV)6DjMmy3)GZy95pvRu0Jp zaN{Y)%&=|(dg8>XN!oGE0oHZEQ%H zUdU%+k`lkoFkc{XWMKi}0L(Yj0$c}8M`750cMyrH{~pPjOy)HE^5E5uF(8@JsVbg6 z#VKO#7DljPJ`G_4L72Tt7HQj0&eCWs`{!c2p<(Q0VWV0b$Tg(i4P*5p=z4A|jfdZD4%6>m zH0$*jtMfGuP6|W6t7D9kWKdUqps0u;WrEbv6cfXP<46%XmJ=l624|L>ajqdkbxLB! zqTEt*ac#MAF#xIu6Luv)+#qp5c5+Xd-ntSlWK?pIWx$u7n@WaahMIXiujqbmwSU`s zTT4AN!+!le2nLnq9#Nf{UA+hZABeHCdh7>Tm&p3KZ{E|p)&%)WR8%A)->;a> zmB>0pj_oE6Gb3rU!rZ_Oo7ptxa98Z+3dX3>b}_}@Bw}6>fo(CCimMcJ2aHn8h?2re zv8t)pVOlszCbXq`C}h{?=}3RzL?1ZOe>YBawJut7ii?n5n4w@RZqr%D^LOm+U<580xDNo!%!U=K!F-8RoviS&SrACqtiOz&fI%$e-sVGEZ zguggKwvSE$-EY>M)ael;-InqSnKM0NKPKb4q~A&b>|NW;uhVNSOhul%ZDy&2D zG4Q2BL0!C{4HJx*g5Y26e$49|`+W2$dl4D1N$rlZmtqHUdlLnvgf;(!-t5{N(2DcQ z;oi*_%Nt&Jm*jx15Qlvs+Iqt>N2FJSP3f39XH0JVv0RW&kZKsI1*y@Bc*wR9+mb0v zmFFu8p2SNTp0%ac;+jkqWC(4Ea!oR<)EGEUDLvTcXbqJ10G`1;f&+TBGjPIlkF(rh zbCGg`Cy#H+6wy6189_k!(KzL)1#~Fkdedg*JSMbZX%VHMNx3e3irvTT3T&SSjugiP zh{jn>Wb0~QW#>%d^%2P_(`kUp%foD~aFYwSt-~@Bf7oY>JQ}`X^ONA_p$%;e8!(Y9 z2A)?yKYP+lGtJkMqYbAW)(V;!-)?%4*j5dKlfw)x@&H5*iVoT;YM$)2ICH~}2!uMI zKzol&;ncd+D=CNAj7ylLLrxh%F_Hil6g-t3gMjKJ17)G5122uTQ+b9DM0u7c?3bdM zI%hV=TDfrG$SU|qeB^b-_prEnvLkDXrI+f9^+k8Qw6exL0SZ)J!C|ByU?8dG;>X@X zB)>2#p!bVqJ2yIzj(wRm-~8q{AlCaa=dd1LY9&gMtGLt$z(t6s9_Q^~y^=!%*ZdSE z6iOx?%YmcB1lz8QO?2-|$&ZTt0<$_yz!JH;lFJdS{TaFV=j_r7nH+zZ_!mUaWlWCg zB_VxuBwlxcWB(qpj}HZD;l+e94l?m-Obm={z@{GuO;WlQS|d{2Xql(7wDuP`Qlc<9 zW1T!Pl&^w99c-rVykKWN8Iqzh<$x?2qb9Qu(WR1sXb!;7{2)4)PB$k@Y443WBsRD7 zYo15;17l(w<)WyD!I(M?2WypJx@oaV@@2wP83+`8rdPkU^`DKQIO0P zFJp*^!CY9tQ?Z9?O{U*ycwAU0Kvo2 zQ&HT4PfS7TDP{;JCY@3MH|q6z#+*<0q6Zq1FpqN@Q9N8N2Q-7^GXTAAcY+DKQ_Y)~ zc~4}U4K?*D#g&MLz5Gs*`?npBgd6wU<=$fo8BPBmZZcz-`pP5Gs_n^KaWLZ8v1pIB z6G+@f6GZUdpqhUDv~GWNl=I5twRW8k;rwaI!Ax4N_B2PJy*v!5I&!R#Cz=tbg`&`> zlEstGj>JNdIF5M{Gt&k$nRqaJ2_FbX7B9-Fh{6*m8Oz*Gw1lYL=b9uTE-c6@I`)iW zV{ja_QOZ|RE;VZuESZM{FY3%x-{E-(Jg~AVc!n&22#4l;ZqZaIWou0Bp>)E|xcx~w zA-|V%xdoXSrJ<0gJRz}i0?j6EO{OM1?Lnj5W`t%M4ciGGZ)CxsWOef7GQ&NY8`aRl z06>f+y&zJCwMj+E%$Gt;9mgjfFxdnI;tU@03k!PP)T&TYOH2$%1~M_%oL3$kp#&ZI zyMS;>o`~7b%z%tb?PCw3puIveizgKN$r*k#nO3Z=eNyD&)X8^Gf+ACRs9JJ&k;=~1oTp*GK>?V3WN z<0O;aR**HRon*$7_|(suL9q-bPWv*$EL_jf!x@tuxUw*ac#c zaiN%bFq|JK$1LP+JY@4&u08yv6q%Gbp)v)*v!tWN&7MzS zK=F-yg*mBZdP`?+WZ(1W49mk#=7wv!@-U1t4@l{_j#>a^w)Qlj!U^U#t69uhTc&(V zOlS-*9c{Gj+0u}yaKPB*kd-XHU245-l&(vq%>`$8$`vmHSi8Zp+&xLMd^ZG@#8`XB zSbL$?p1?TGPuW~&xr&aliWoc;mZM)8LXn*mD7IX3aoZ)&EvN*5W*nB};f-AzfT0Pt z`6vP&h+v_!E+|iD3+HG9MbPb{lPNqr;){`@U=X;$3EZY~-S)&|}bk}@(8#F+@_-lO$vC*vIIIAt546x~H>kh@8InghKRda+_*BPv%gdpG_6giRI{$fy?aQ|ntlD_HbKe^EoS|F#&MB{ObP!e z^IjXN4w&{@AAtt3xwU#3#x7s!#WJb z-TF1|Q@Yd)x@eD32O<$|UEC&r&*lUe#+VY!uxWM1@N#=d^!T5f{}GSQFW1MX-~YX| zw)k-W`yH=8{rYn2zqa-X>%Y3XwDc#jRIls1CcoI|9@anSqjVqk|H{hhW`t{+?>%E^h=1`@>s`ZN~?rl_NKj6pK zj|Yd_M+4P>2NGcTiNaZ3HbxpEw3PZjP9(UO8I8P>n<{{Qv!ZT}nh|H|W){Qh4C zlJKzq@8BQq+!OJQa3d??@141EV;@srIe@Q(t=)7e+`rq%>R5Ed*rVp=A@>QdC*1BP ze>6zPhZ%Zv#e`$YA{^$PETI)9b(mIE?_afjmul|PyDO@U^TLshhnGZA=0J{q8?MhA z)o`m{{UHTp-v5frzAy6M@?#(u5B%Squm6{kvTj)a$16*D{%>Wq`N03(&HWGGsQi}= zB$X6(Nx{9o<4DrntcVR!k$UioL76SnCn?xB(Cm>6f__S;1vTJ?(1uaQY+**2S!|#O z7Cc{T01+J<%BLv8Mnv&On zhUGE$K^KCfOb? z+&-R*#?ZfQEL>F@d8LSp0V5Qg)w_fbLOqJ5rvS0@MmQM`HNd@2(&_~w{xbrdNL-Mx@GYLsFJoj5zL&Hz^LXaYe zTnp*$1FcA$0Q+})61_y))Mx(A-~SdEHw1zY+jrg3w9hi7(f=hk?nA4HulAi+Y5S^Zc^SjVt~kv+P}&yE}W0At4#scuUIP+YMMpg``OHr6t+IZF zrOmOh{0WGrBm>nfp}P2HL$3yww@(wy^rHNX(AAAdogvdZHwInx< z*BnwdU|6o(R5#KI_-R*FU$-Bq3`S89e?|s6YaQ{;^$TewI&?nRO^@ z;i~?m5q4rAta3SJlGjDMD``vcT?K=yF^8ENKS|52!G7H?m&CO0LhX+s|MG? z5;O66qM6C?#3)K==BHOOKew`A>luW}C<$ujt*-U9QW$e?wTvFJq3YsPIKK#$*=JG% zKr8JhUiUxD3|=DtWt-$~?EegCBH+mooz; zEw4b^4O!pys~ii-zs9(amppA}beII*anI4F7)Eu9p<#iMbfixGQ6_bA*i!N1nEyjp z4U%;zB*YUHis(Lp!L)GK2WbLNP`Z^2yr)o#<00F|cb&8&n}Ga+SNL_a5Z*Sj5YR;G zot~1HpcI))rCrKZ#}cG+(%h&t>&^O7#lhjI!EXSCL#BtB`@Gy|v7OK&PkV%})^G&b zk`RbWW8wb7fY$`p?rU}qTVNN#4z%IIToUmTM43E;tBAzB~-;w^WSz`ZLdC>pe3;MsO(pF@-pKSAsg9+TdQ-3}8UYxjYGWh7a zVFZ8Q-JU|uh}Z0)E(*q*yh2i$PA#1zk{|3k`%NQ|I<`!6ku{T8+;}oDl$ic7SC-l` zi-(a_0h`}_akR0{{=FM>6#g_{Dztx)SJP7Dg3{-(VOgts`cZ6nrK>_x<^%@X)Cp;c z>Vy0_Gqb?uvllY>}DbWcBsM_2ny?H}dL*(wR0;cL(KkSCXq{mObki;dR@d zzxfm7Buh&0;zHc48dbPQ~&5EB)IU--1d)<)iU3Y>bvW8+APLS^2 z;^ff1Og}#|oq|5%uyI*a>A%XEpWu<9z|4EqEl_A@9oD zPU((aG(f^Z$EB=O-#GTIuQwe2G?>DvUlxCFcdE~9<2va=*LtMSclUEfF0&anw>t-W z+bHE#X5qgT68L7TZvo@jR|Ukrwh>rI18>heT!X8!El+0oWWi3>HRV4UnF-PweUsKW zM;Tt^0$Nj-QWIZ8SoGDgXQt+A7;MSp3~+Y6;_BpHNEU(kf`^0j4|M)>LXtZ>|C^83 zR`dG5MJWDo{@;i5A2Z4#sT#;zHDtD$>yLa{NLyjJ$y_2PE7z$`JEK!8m!xd+QfLPA zs#2CnBX5s!HFzP>j!bN6WQ(doE0j>_n!G>NDG8NuB6?cF$Pz4)l(-aiS$jUcteyL# zE=^ha+)J_%nSH6M?gNpx+NsnIM)IXPvroB%s|lO@y_-_^*Y8#@%j35B3Z2uzbvs_{ zmvR=(iv6nfVs~$6Bj@@e8>$rDPW924XD<}1LiYes^3{AD>Zwv_Nx77jG(!;%<*j`D zXo2Bg$kJu>AGxkOl>b)OnyUr*Z)Np?{@)AwuRH*V6=$L%MY$r`r!ps!UwWrRp8KB}_kjH?;%6m?ASq6ml8r^20yx9 zj`E_&bUEB267dcY|1&h&bFO<#3)fcDtWt7wo=jEU3R36U*%wH`83k=5W4weMXmJ3P zjbPh54o?odmOmK(F!}<$>+dAQkP8eZ2dqryM1Gd!Tf$2tx`Lg9%@=*Yg4F zdcx|G?Yp(D(du5KDm7iKtbj1f=TDeAQfbbzJm?Ca(G*nhu|t=6%8lJkTk`VhmV{%A z;3!9c=^fn==sPEr`sYkTeDgt?etx09SM2bdz_;1PjA%Hjq-Y3LGNH$Ya;TQ|1hh(# zoI_L@w5-*!0N`Dmp=bET8A_wtuN|K8-864@+ldeg+V(Ijw!rjkr;;o#s}MeN)???r z8P2#v3ENdR=8dDRCE&erKHN`LfZMIP<#AQ-Ic7;qXzZi-=8ZrE?Lyu-D{*XT1u(Ur$uzmyNfTik`D7Tv1+| zMtN$|EKM__xAWyS5Y&YV_|h(arMF`hx1+TUTX1q&TM%RXjqhuIWBV7SQ6XMy|d5Wo%D z6QjZOMFoC->;5&tKMA6|L5H)NrBev}L{7qRWzb#=)?{t}UADlh#&BX^78p8a2&>6> zAwoQ3f)>E26It*&7#3@kxID{m1rKNXXz^Iuec{URayEOB<1ch#_eZ7jUvnPQRPqR~ z?XB4kAPuze@|DO$|X`uGV z>Qz)60VfGHQq5BiP_2~6(q)qBTqf1b56bs-&;gx|dWtIiz)a4H`Vyt5Q5irhx-GQK zP=--!xoeo*@uoy~GBci*&~qr3ZIe8y&#>rIcCUfi`S1f{8)r1^h8P8tm%A<$LvJ-{ z2%(04lRlwT{zt3D9om1FmkajawdIuu`TxH7e^RWOG*3wt0O!lKh)+QoK(;SU1@2Z# zMQm2TWkzH9WSS@Q@1i(34Rjlv_t@|oEiq;OHcKXhreMm1#=f~B`1{i%zVpgZD=>SS z9C?c%YOc9$B__Qk5PMJ)Z(`AffytZ>6ofLL#LfAL>fQvAWIZ28>|FX4!NwTEmX`# zZa0w)qR@Z;*_J|>xhgd`PVo4KBkuJsrgMx$700kqof;mfYJQ*}-+n9jaI#;| z%(x|Q*WKBpmpglVr4{6fm~Y-)kP(NtGx7Z*Wn-wi=_ z#CyqnCHOJ!N?fE&dHJs`c@un5Hl)`Z)&EwlREvV4T|_liHB~#`e-D3t)k8Gv{F=2& zrOrxAS&dRT#P5=Ve6vymzc%=H9e*1Y7xJ~#t+2TcD3YG?H!!0yBleJyly`eumyzRL zSYvtdyP0KZCU?^XFr&cra8Fn3SxHV$Q(RSRma@?*5c_n3z6L?!8u<>tC&Q#gv8eJ# zX@soGMrdvs6tsf0T1xc3P39};6{yB#H$osXCc&woZ1!|?)(c|ZhL*2Gr(uv`~eM(gqc3DmpI)!_{&xv|F!o^V-F*s@u0* zH>vpz)x2Y-a>UJzoBXOIPpKpaSDA7rw(_o)2|3cRTs4YSrS@7SfiNhDrmKb1q^eXi z=FK@Kd90fD(9A1TE920cwmpB%(qSI4Cr@?`jvQ_O;nS9Ll4;ct9uMay&37tSnJ?4} zd_#A5ippD4^+bJYU2<}=@a`&0twLdUS#jC^M~0iKTwSO-M%`)mA_sUTCQL%!DjJeo0{HN(GGAdLJbwe=sc=SzuLut1>cKMp zpI~^0`oG63`TQS`SJxim|L&*%=PhqeEjkBrMZ+ajU&32*kEi7?`r9sR%>qJ1c3mr7 z+k=n2+(k)Mb}^#671bqW(t}f9!fo7XHbj*ut3q?_KqJ@Q0W0`gBp}FRFMm7iZeMBr zbt|ZFopA6sHkZb}Zw*A<$64x@t86U#c6ZY|w^|pQnct~hkimBwk64k?HQ!^HgWsdu z(a?cc-nKhKleL|AlLsH#-|K%xJLLDf)J};XVLK@HVQH~PDEL^Y?wE1?pYCaEwKdhl z7J86HS|o53!i;E}up$=Ca?)4ktW>F$WJ5vpwYLIW+`4+1* zaJ^$njGPiq#m<~^`p=4tJEQ+=kJla-;{Vnj=>L77|A(y8Quq2|2>4vAZlva$s3qnh z%Wd3sJ%4+mdh~MlRp}<8{wmJv!-M04_*QMfIiKV9>g=rvi!Pe5Il1ZFd%lgVCi|`;P!Ugc z_Fr`Y15r<$^>^m10cZf?3m^U;`4y6TBN25{FF-W`x_N_C?w`V-eB_YQ*c)RBx)NDT z#*zogtsOd2sx|Fmc5)m90G(=MZqIYSrK_~4%Fa)_$LNq!@=Yp0Sx}p{I*yc?OR$KN zWGIgezQf(8R4~AfrNA@w0hK&*tHHDu=m{o$+8JlVOVl}&w`PJ8#t)YaU2ukt}oZuNo zXm#l>`jC>hO?Y>}exT6~lZf_Ye9nPeyoRKE@G*sdkc{e1m&iytm{CPMZ4-zmPmW$X z*W9eaB=PMvG!gndjlB_RofoAERB4^%H{!*RyE31CTDewMu0?gNc`KF~*DbGzQj!*$;Ld`v>kR`B>BmR$R=ex* zU3IZ)$I8j6RJ_yKewFH&2!NHSQ;99uhT-pLWu8=YT0wj!UM#V*GGsEi2PkjVU%y3*aXz*k{VW>cq1hL zjH8&C8#p6irgXhR;FXDz_^g40?>CB|QT^~4D3Q>BRW?=ba04(EA$Ta?%cR~Cjy!X@ zk52v2kG+(4lF^GgO$#m0e#pPOn*Gqc5{i__5DNTXw)c&-I1fAiRNjO*x&8r_%(bNX=09AnY>xZA_dY zG4RfPB6pd@T0_PPA%ZL813~Q(awA1WQ$iVK&Qa95*bFZjvxsq_l!`v=9LyIYiEt(Y zbS51BjSM1<#2BRB7@1juwvtV3ap3;%rL=SW@m!|FGag%RJ zNdgOd!xmlXN?a^#gI?7VB2=eU)44 zoh^KZ-dLlXA2oh#6{=Kp;Vj@tekyO?C||lzC3RXxCBI})Chpz7<>`&8z!z@Q+8V`X z1J*|pw(^$fdss0Go5|skwMc3iJ`@`M?)_D97f)R>(@m=YpN;aVmpi0QU9%F*pT1Tl zSYKGGn;V?k788%(w?NQMPb7imA%kiMzttnmvh@{0DL_atp%G6?<4)^82Tsp^XaXLc<$D&>;_OI4fYjT85KkCU9V>t zWGRPSW*-BraYQNjULtk+du_!G^AVRCqkv3NJtViJVs-Y_sU zgB0&+4n?Q_HghkOo=`SlSSc}>NIlmB4Sb;g*U*0oKm5}EUu${#zx?=t{@+Xb&(WxS z02q!Pw>}F>?{UoE?+CA!O0J2{EE@98m0zb^w0Ldu^^)lnBIZBUXp^(pOJ1PoiOJEit+3Na6Pf2HY*6*Ctm!2~z0+0YX>)y-yToO)xXKO9+-mb> z-f|y|`Cc)WlI7eQ>g?Q{`7FK@&G~tie}!h63CA-12WGY-x*JW>@g%LuM1U-D8tZFA zN**h=zCngk<&&IFO^ReeRmJg?`zYEM=UJH8usjn9x%K`mxvkbbKeVHfyH{FE2zCs} zZ3HSfZ|?99T#j}!8~=0ri*|ez0!5zqrq_cFf;<6HH&hj`?^7;S=4w}f1Na5++>moB zU9}u@{Uhf-q?jb)I(p=@0*6W@Q*_CSe+raUtE3g|Gqc; zf00)w7cboCo+Ph)A8?kvCodZ?N})i2JOAC+x)zwbw}U9zb6vTR8_{#BwLHOOV#fEO znis>%qs;ou=Pb{@?1m!6iIpd(`*=epI?YCv2Mo>AvT6@?$$jw|@qWrlaH8(a;~B^` zkcTr@$b7gg=K?DQ)n~gZSt3r^#l4duomjF&zF9c9l&>8XwPzyVJvcv<(|_P;{&Z*b ze|f3k|NnTc*?ge?Uyc4x%K+6!-j=vSyiCca_eF}2jB!Ti3%5X6jd8M5o&J~84`;U= z1>t#g#>4=cQTH=t2aoLK4kPrhJ3nNmH}q9&748kk7p)ZU6vRUIb>Z}lGZAFY%#zT_ z`x6_DxBuOkrQ1i>E5^;@Oq^w9$((D#XB`-_%tl58*;iT8(+~Ws(O93ghq~Taw>^^W z3g7Zq?G{ZhXYghDaqyeZ14OIBagetN+or*Fw=}lns`5#`L6F zwTJkCFT?+Ff}vjH%k*)R{lDYQAN&FbC(ev-> z(klG7xvUE)NFQaBGRddB27>(%!X9h4y3&M=_vUGl+>c|rOGjjzM9j^6nEj^S9ePPp zN4?V3x}Y~BKS7n%75h10CP4Tfsy$!^LFo7XHuoH4co^0C`mP$_JZdY7uj??LaTNAi zY4o?bbvYd>`^_y2xA5woXp**QA}t;|f}x~7O{L|ZdqaJV7`_oto?woazJwh)7l`Yc zS07~sn6`Q|hr6l9fCvy>YV!WW1aR@g)qHk?n8rVSFPVu0Z{sIGzN&WG+IfYl^Z(=)$>wcKVfuHEt^(6S!7wcllXpRw0 zWs1<~#{bHZPL5KHqa<}DCeAW`IjDjqnWhrdn{dC|w zHKA)jqGXGfKo2J2*dO?>k$^KpC0us|VM}4-pAm-h_P0q`_<9pj(D$Gk#DSHkpF|?Q z!ug-X-Nu*eKZDThK3eu4GBhW~3ei~1i#mk0ju4*qRz0r7vf zwe`$#wqERQ{%}N(^y`_kcd)g&*UH|T&(ECgofq^L|EjX;UG{_x>lS9`@YOv0%?e~s zTnwM(FT5N2;Q4>Gc#!J%Gxb)F%Y0T}_qMYyd)wLDTqXHJegCOY;HO*(5QEL?@T9&R z9d91LF~0FL%)j2PN9)d`**P@>oT52qnzH)ocJapL*=J(*2~@2Y?q)Zg?bo&IcRk8F z*xSxJkfYCD{G{J-FIfXw9helro-Qwjar13+3sArq%>obLK_T#mkpGeXqpGJq_!52G zr2ku6EztkP2mhbD`8N~vLln$fEzCr4Y~m$yN;nqV7+mkXi)KE?KQ z6RHc@>fY|rvC%4an+#eq@~G9Hgxyv;r%Q^3c_=Jk| z%IZV@?>pN6)9-(C04r3C;37wF8BSYUTe*8BbbMX6TXs`{5L;Ut@U0m0bD@GWu%`BH z`Cd#YS`KP;yIGJNJzAH(e4~5jL6!8){dgVNAbyYhXvP8RQFLePf~)4;%4GcK+=L>k z++?1@K)1d4A_zGebAY;nDA}m==%p?i&&!+IUc|ot{AfE@x({zVNv~M^VC;v*;t{+p zEuJek48qBK_cWYT_=Y%#lz1?K%B)<>N(1Ob=U*=FcHwSGn7QbjBU_=XfY3RIJlkhb zHkg_Hu(fqHBcGWa#&`5fy|;t|_-a0@G9(bdH~eeYQ(v+t^w_F4AgRMd6I%W#|&` zdBwM_ko>x#H`eMKu`mYa=uxAg*ryh`{>}kk z_2`jIggmDhN_=?*4WMOd&PVe>fkpkEuC(L-qNxl1xKEMk<9^2a9ddpAU+#%U2w!!0 z^|&VX-|X$tKybvm$OgZs_8#R%A(>&UW6p_`#&eZ#6CF1$gQ3^Ow@IZYpf6w|xfJ|2 zjOMA^D>^;7BZ|}MV;gV7N=?YoP_ajNz|5I%t`JTNe7Fz*wQMP95rKC+d4~oV=TSwu z{rg^bK%US0o3C~-Gr|OOlGNm2@qkV)N1bRGbOi=+Cw01`kd9EiSZ@MTf!2aVEFzC! zw|3zrYSM7rV}$OnejJGiPHi|#6Tgmi=Xj9w2w-AlbF8%t*r0(}74&7|K6^$?B;B=6RxvhE8{Oey=-6cSAfs%nZiu&mV#(KU$ zImBb@>TcNOYgPr{NK5den^t4GniVsMJjeU0DFo_y1SH)To2M9zd-M`7vNbD@A=!qQUovTH2~tHs0WKf4Z%wo9Y{>rU+TxBL|yZW zL;1lE{TSqo*OLyO1A9T&4->=?F~&E^0G6x64Plk(^Y#NI{W{8GS#=^?tO*1U(^^}*3jU5F#!mv_{P>)_m{wE|G~{L~AE ziJJS*u)OlN;emIKQN&$8fTI>RWfxHL<`tw?Jk&SwE=mnx!ti$cC_n?70>gYVNYn9p zqj7O@Q3vs}9>u4PA-9q=p5lmTP||NBfd^Cg*^oD(!`?l52@+HBwKfEy^lwUe8``k5 zVVih1au%Hp!+x{j$bQU^_-uXLJ~-Z})~ng4*M~bVHmbl98}E+ZynuH}RCTgT-Y+?S9j3FXGkgi62&y4007BCWA$+>)xU0%6{;=q-!xtlARZkU|8-L9Jg-SbED z&La!I+#mTq@8DNJLk3e@YGFog0@nV~;R4jMt5tH!2;u&ScSyJR^r{HG7cc|K@%~X` zrzS$*?{P{Jd~v9o1l-n2I@ruJwBuC~ocsRK&cet2odaVSW*vXnlLZM#kL-O?b>)fb zcCwiYcM<|?-eTrH5dr!BRUK@_NhV>GtSq<-r`_&C0bc!aVDw>*yx23|91cg?7+3-~ z1&IvM|Iy9csBZ5W{j|GJJIEYkVRZLraE~PbKY{=ROjWX!2PllMN{TnAHSD!emA}zO z9jQx#pNo{30$DePy*7!^vmazRK(~KT5+d;t^PP=}$d~6Qdh}?9Pst%#WI*^mV>eB8 zG!X7g!(eO9Gr@n3D$2kB^- z-#Tvp_3jqnDr$+Z8{HAZjpR9qq7?D3ajG3A1PlshY`?xC2SgJS@l z*Q&n(Cu}Up)<2J|Rrl`#hEdHUtU1H{1b+~2?-Diih_M3aI1o6$FE@=Du{j)OsbPSt z*h4L}m}8w0WxNBPK8hMr6+SQI0w(?_a7UNGR$!nzBHPPJ+^ajJ#fIJR5jY9_bGFb) zdJCx5h6kxRhev9(NPY-;iaY2!Oh_W!MuZ1W5lmPjM&ZAv!DUr5&go~u-tX<|=OP($ z+DkXm+cKnhFWl!eUlf8$=Xm(LFrjqBGeWMnyIg-ScJ^MVIV|f%^niI@xa|rOg`1hdKH@|i{>Lhdf{U)_D(^p9$tRJ^4@YyZn+}AhoG^6 zukp(39vq3E95(IYOhDd`Mk8R*GGAyukI)gDi#0}GR{-bzKFgDvr|SJM!lWY5jyY`$ z64ORrwu<$lnDHnlpOCK>wmc))CqQ^9i*so(@>TJp1Cl$c8j6iJ@!UYxI9$JytiOF* zuP>~xSK2w)l?*})6`B!e;X=VTJ2RR!@wg^dYhn!(qss6F)GEOW2wVcuT&yqF@V`y^ z?@|q$K`e!bWzt5E{cZ}IP3NrOHW|$(6;;*SiEvqeHidXc)!P zqRo)e8GP3k${U~WU;Qiq1d-0pwJEMc0zqkNyfo+p!yvt!QU~P0suTtED*Oe_7bc)r zzPBFt@w+U$|J@3TV$ekS(kjUR1?d6*2I|mUdPj96tTzw0Ufu{%943wPkyw})k7leP z{Z-7p0=g6j-LqsqBUWWy;5!zWmY1mH>Pm;SSph-_*bZ2!*o!ZzT>1D!u>6-*!9U;s zWwo`sQZ-7;U7Zv6s^Yq;JTDf;9tj%*D+&WKm$Lee;+TvY67p4R7)583u}~fBQD0TK zQ44piR!gc>{|zyiJsb>D2kSKqq07Wis*h$!F9j@vJLFeVdVm%sT_9{H`Z?um;kp{QeUb!>x*=70B_I$ zuq{dU0GYbBJfe9I1pszRb`5N~7)=1>K^E}D7}e5D_mSzxKr+|GpO-+kf0+bOp*!%x zQxp_F5D|dpYJS?qOiE~f9(iL}HLOqOLpB!FXb{+-+`!U60Lu$_m%j)Am+OoFDF9qy7D>(%`N%N35VBx`3?%h=Gzkxm+$6mm`ihtV-MMs0 zj_+X$d8pI{`Gz6n0!|*6pt8=3ds+jkr-Sv|A#(o1D%Dbfg;EucQ~*sA1ixN{Y6Fs2 z>(1Rsl6NUIMoB+YDglQdyho-A_&)-S)SL8TJPP?{)lNT1x&uFcb_`Vig?Cne69(?{ zz#sa3f7q*U?|fc(5Yzryln^-6`5UBQH7*_#!rk@XBiq;_T_?FAh{{6c3lG%`-mlb8 zmQZAp3P5;s@)(}$YO#=I8KT7y_@dNLQnH_ke+6gHy0AV`9gzM8EkJeHD_NP2W+ysf zgkhMM@C#r7+fSD^=KMn`Bs#Cwj}CXL`GZ#;vhd^cz{Y?|;Sm1&zyD0p8g~40N4z-L z+dKGicmD^mdAK9q>>uwO9q()-fk%3lM1ZJh+(!Q(Nl1zQ^@hl?pqscK_q{IW-wa{| z*y_6}dig4$NcD@W#(oD(^bE=rp+JnQ_6DCR4BW7=2zLw{N%;ohDk zKC^Vd(jYv=+%97k0$Wo3Af4A}Ua*PJJep!GpV4*H+I;tG)z~gfGmG1&BXAvNN=yac zbxgdQDO-k_->?pkoNOhUi+6{RGbk4pb}=zTxQ@U8`85ICSuJXtFp&&JL?o~U8$`%g z*%77#;4wSCkKQ%BELa4Y&*}RC$9v0NfnyPOus>i`9yW-zLBw}#Q2Scjq&5`qKI1>-l{YCAW88Y`)n$J`%?VWX1ap>dW6TyeVD{ zAdd-u*uM#AKge>nTf^^$9jxQy$;H~|l9fKoSbif~{qO}q^Ck@5{|FPirH|K_hK?T2 zJpvI1YQEXu{pp^7NDt?JfT(v$9z0(eGBk=?cvW2kklzc4QPPW&-^fr<1KrD0>3m>7 zY;J37{szI?<&X#0o1~E&j7W1-_Q5;#UDQRZkCYGAMSli<5lvE;+}b-Evvbep>z>J8 zu}3rvvBc$Ics(PQ`9R;`z<^bbcMe}|ZNA25!?gn)v`McW#UkqWgKmHqYZ1Ia>KgiZ z_hC(B9ck}=WlH4;05Xgi_iac0EKr5b3aVZZc4HsQpaVsCNzN0*;cdR&#a74+*TQgS z$~l!=B{LtN5iq0|_Y{*JkmjBu4JxV+{oy4V&dE8ao09cN%{GhB^3VMkojF13A;-2E z=j)#UzlZY53<~J}psm7htCd;xPxPdhp0Qp6(QL9w;f*ZpKl||=%$N!>g;maie{SEiOG@B3kKks_| zU3EuQz2l|H-R1vSYA!v_-~YI}xbzVJ{Z;ZmrHSKU95tyMTX^@LA0rhbw(p1C zVRri*nyc~6Ril0yq?9-)os8v$hodvh22F{X@WMjOCj^Bg=OA2{!_83X8B5sf%C@Q24ji2G4I^C3rmAXBBfXlTcn{s5h9d)k-E^ zbhUyPCnsW7#@laf$kfuJ^0zwtpLqAq97NM-@F$^i-EW z(Mp~A!t3<}UqnYiTgiH(0bd7`4qCYzgJ|S;V*f(_z_sNDBot+9sdp;Q$v^P(PZOt? z*z@BF{GOSaw_RK}r^Wh8y;<^AJ=}7>YJSw5yX2nE&hb#s-LV&=q{O#|ikCZ^+w&%- zQG{P2atMcJ%P_(rlDP1N;W2fRH?HABTGc=O8=n92M#toHAOAPz|5{otod1v49`b+P zr}JNuC50kPaWd+l-j`8)`GNv?D@dR!`ImfELg94+oztlv`~6Ak>$k4{U=>Gs%p{>| zOhja-4VXTbjoRw7bkuSbB^?5-C08vXp;NKw`IK3=u&9NA{R62VJR$q)lipA z<2A^`sA98Kl;R3rr4f3IS7xCmH82=OJ@MUp^(MQ#m>XT6WI{ioOvza{sv6r!L~88w5~ zIWi^R$OJA+70PJ(0p4CU@G5wVU}dihgV`8#0 z{})bHhFe{9y;QhN$T1tPJXoIbC3pP*{#?m;Wp~FH)n?N8r}(bXsG0{44!!*B;V%YZ z!>oEt+=KAk8wNdF1E}uMH7B)ES*kDEgav^o@J3bPo@ZnO8^?^8>M}W{>UrCS2C8V_ zMc>ctj?FpD&JS%^y;-Jcm7;V0c5@KeAnDgI&15C7xy@@+rzlzF+0(556<}P)SsDtX zJPa^d!)+h{tz83w+1EdAH>|GabB8h=5OUVIsFa<^xM1`a%U3{r7$)>cN0v;SI<1&@ z=G(;(67mu!6nLkeI@ro59yHjQg9FQ*$z3nz%&nvX^oC;h#Sy^+^?`Ubp>;UZRg$zs zbnwyb&(IH?%k-RV%)OnRiCotzHk;rRA#=wTAl%KSWAM_=yj?Hz1Xj7sa@ zLXYs`12=f`?A;aKHvm0MTL_L;hOaR4joGSro4yUJd5nS|H;R-zn04xS9S6NmgI?z$ zm+>*^x{~8!ejBb32o;MX*^x!Z;87gBUw7bj&oD^DJC9&@66{ryYpTOJbGsfY|0NDo zUB8NY1qodtzD-~e2*S{Eh4UdYa7*dXg{U-0Rgp$?*Rx2vaWGEnai@YIh?@8>w|fIZxt9Jn4>lPj6fx0puvZ3fHZJaSulA}x=(~~o>eY@>v(%QKCHWMN%3-3k!$&Oc8MVHHA&6-Qhk|~NhK}(wh?lh=3(Qf zpEkbi)RS!$$Dz9^Gd$ch=8`cY2aRkz<;Pd-{U-zU=22e9sYA)C&8Ri@myKkoIf zqyJfJ7W6+4`v3b#|J8*D$dqG3r3?7)WHiF;QRDzmxiP01iAhksNlJUeH*+wH_(V4K zRGd7)E}y)`)jpm{d{`Mp>Y2czIoTp5OsLoS>yuX|dn7sY2B{ zFbFKv8cBHamXn}scWjX1X%-aJay^~$y*C0} zRP1jBCC|%fQe#yRRdi(TZ8cl?DIrZlhQiM@Ztq|vkb7)rAVlK&ETC|4+z>Z zxs34;&G2FrBovkn(j{Is)8lnwL%l>~41oLhS)#jw`%UApz)i9{Ud}_AJ?XNYe>!x=7#2jO=)^5mF(Z;F!vYMZ|GYXr7=R6~J zQ%Y&kjlvXDR?@u3L!a($khce$Zr_8lOHs#?jMlYx!iC|(jN$(=2+a6wH{P%Tsv9**bm;EW zy47;_E?1b?wVN>e_hNKz#y3$XJ=lBd!uPrOKlHi(V*1}};=dm+udEgHzbg;%zxOfz zhX^XFeuGg$Sx)pFK0shVo{iAks2CU96FFZ%YJlTouPvvV&xg_?u964flr4|RPj1!e z^<8FE8FSnS8K{)waBmum)Kn{_rHatSro>X_o{=*;PR4@bT}&5f*)w1wP{O%xPs~35 z|J%FT=eTX7|9sY8fzWDCa!Z}=^cG*OOfpT<@yzoioix*WCU#}&j*?j4i+a4X2I+x%e1n4l_-HSIs?qtV^-q$b7H7}P zNW=?ASnV%>GZ*bbaeyTH?|<3Va6W#|$1EG*5i+G^!1{WO%IQ18NuJ${UczDXbl%s$ z4wGg>-XTNaE}!pbb6yxciaXk5K%&*6!4qT0w6A7AYUxMroD`$ziIkcewA7^5+Mj7Qh0s9?FL)n}~;dshbsyqm?&b*Zj26A!W?NgAU=9MQE zYDexKwArO67o;Bjg9&XwzN8&=sX6VCkE~8a%b4_Av^Mm1Kaqc4tF%wX_q5rrg+4g5 zYv`mBU*8jTEzhdgV&r;gI7laBgan!~b-GYCT8s2# zlS4tXBZyh7VZP-b$Ft-<@afiJYztN^%+sfio-@cf>8b8NOV{T10yq_`Q*Y{pxdtu6 zTi$$rm(3{7SrE{&CaEBajiXQX{!eOm|MSTEKM(%b@k#fn!T)-q@fT47Tv>gj@$Vkl z_#dYyhmHT&)9nBGL~NZG=o)vuC$b}YM^&r5HqDw^K9GMM$G=$b;rDqI zG1!TolW*iG%ZJGajZ6@g8c+lJ+kD##ubRBLNv9cPjVhs}J-HPh?h@^*cf;LRd;Fqy zTr1U6w_3i!p!-O;C#q7uyccKY|Myo{FVr*uVYSe$0ch7)fH17W6}B2gnc@<8yw;GG zx62V&CB8C|Guj6*hd6|=DuWQ5d%t-HjkO$Kj0}P>@5W514yIRzMOh?|zFm#kQAU2( zey;S9o^zayP2UdZkad91EI_K|5aI`+Xwy46YGE;eUkzYps!^VftdjnXC~tKw{=OIL zo@a_G@2(w!-m$k7{!ZAhb%U=NebL!!c|$X(DM`K)#>D# zFFkq94p>Gg?WxduWB9S|p6GQmRNIV!F(MfZ5L6w2uygQbBrqUL3m|l$w*VkdmewE& zfV&)qJUJ(yZqEpl@@>t+h@n`wFp|Mb*Zo>VxnUk0{aP_u1Ye7=z#b4=NM!|D4u55k zz&1h~v{j^UG917k9lsIOU$S%%>xsbvysa^0iZo^>iQ_V#^k;08%=$Ngfef(O$Vk{b zfRQ<^kbNR~KF<1+>G)y__|erO9P`4di*yX{*}6NC|EYNGkND?9&9XpG&9b}?59Sbu z%2T!U!g_~^__vXdmQ!mEK3_Be$Vi+e;2KSFAOhh6B|r;@_6#Zir~oj#!*09BXXO)^ zDB6YX$cHSw>uh#9d#V{KG&wDSuq{^7N5x8sa*5^Z$944 z9;4F#_t3WgADtdI_WvjI|HTlNlzehIrOeD@kM+ZOJ=(|%j|(t$?C z*DeVPDC$^gqAq{UMHL$?XG(_Sd}_1n(hgjsUme{0}24pWyuO_|VP& zd3bi#eE-{b{wITOXX*76bxJnKa#;VIqdF`Z-oLvQVchQ+>pEaR&A~6Gh<9xXuZAMr z_P|s#?Ak<4!h6ya(rd;y+vJ-0o9O@%N)%CTt{1W8&P+5_IGb+FW6JVEiA?>YVsIAi zt*5Jw0$1fN+ctVw zLG0o@Ta0Fk6P~-wgRPq>WI`dULAf|0_WCP&NVeR$L+8-AJFVrlxPy2eCj6;E*^>sjY}4v2 z*A(&_l@|I*IxR`4?7Vp0xJRuvtH9?r|7#ySo=QB{{C|4XwecTMyJwC6&!b$vJ&}G7 z994IovFmv<9WXrK$!8)jB^)DS)b!8qJpzO`YfyUfuimv3$!R*9Psdy!ISHofB4`nmD4az!R_R}Zz?zh?AmVF4jChoF z0l_G1zza9$0sptlAs==>WYaa>Cbp&J^q_KIB8U|A9k}uk>Ncm>y?D;KC^^K7C0Bk0w*Y>2N>Y626tReu*j%rRNaFT0($55^o_AfwXQ@^2Zn z=xkiP1P&S^3%HurB|Pdm5hPh5#Q*S5)KexuWmjsjl{fEpJFQ~qHK@D=yG-2}&qw%j z4inh3g7_VcY^Z7oBBu)5i;l(Rm4EmY+SGq{%=W% zH~Fs1cEQpwaE^07Y5J1+_w#izCePT9#E68ACWGuM<3wOo1Lgux$N3x(S5#tf%D199 zo^bsO2*y~D@$8ShzRNjSWJMwo5roUNwIMHNbpU%vZY0Br943ge| z;Dkc$2RnMSu=UlZ@}r|0l%PPuboPn|6!e>Lp#Unxf~F#YclU_UIKfXfjrP?Did5>m zpYRU|rZ6N;Bs<3`%j>0W3^i}xx9sokNzgH@?pa%cl(pI|){0yEa@@6jITdU{VNMCu;|i$CnP3;>H#i~kXCcs;_*2acMeYdr zzul7+_25saqW7SEaN;%nm1jKz$PI4&4sJcDxBzf#3!+0QRgTlz@t7-&=OP9G+4BX9 z?RCw{f#!P^KdWYAzxe)N97MzbJOx{s!Mbe0mGR$4w*S}J(cx*c|KB3}@22tJU}dC4 zO(MN8<`Q%4%#Mh9oEY3{bwmt!v$9r-+rgj_2&1gs2!+QNP2h|PxdOZZR&KLK!LlZy zbk6b&ApQ-&IN_cuQWPkxD}dnd9K5hGa_Ui_0fW8pW3Yo4c2FD zfX(hEJN))agz_58MwBF4sPSRSh@h2;u?F^r@6U&*{HBD4h@15BgsW!>BvifT3hfWLP5e2M5tA zGm)?(T3#j~!EfFbFSaOH%HMwbYBG5o8VrcdWH^N6>}Xug(`#H~;2rsTKAUo}D&ZU_ zyM38VAB*&-)Bhj>G+mPdSatq?+;Q~3lTLH~|0~e{Y9>uGFjqu0no{<kK}4C6|p)ENttN2ksF|5?rd!cYjZJR*i6Ve;?`y#q z7hQYhSf(Fb4eigTKFE24qYg~_!W0x1A*(Kf7C-uZIVnoAgrSMVviPwHQfHIf(IlVI zz{8mq-^A5tfTAn7;{!Kc754qsT$1EKV;Lwe4`}6s5<~Xm4+R=2fIR=RO zH!22j3hE}L;OixCzx0y~_R>$SQtCA0@jA#SqcWVETk~+Z8$kj==mS>S&rJV=mH2V> zzs`}P|D84Q|J$VhiLYCTNbn%Y#(pEEZC%C#?IX_9q44SXv}_7-UEF<%l}Y#1xA`WX zxp2JT3q=3D$RQ+l|8mJU!^XtxD-d9YWI^uJOIneq*?=$4?D8Wb&KUEtq_)^1yAQ;P zj1Ezw(}t2DacW+gRGf>qo!-(}MeWWymhB~Abqtyx8C-{Ob-dw%3Q9kKx?_-SfM^F| zGHRpmnDXM&Mhic;G1q1-!@W>IIbS*DO!Uf6I%83EAU0am{fvwxB zoG9aO@D#N!V@6q?gVC}ir%C6aTiHNqR+E;TB$d^X?SacNpQudP)If{bhh&<8@0kH1 zE~~{8K#`+@&jdhA)!+r0h<6qp9~TTu9S?pk`X5cXYt#U%@;{w)ocyn64gS+-dHyp^ zVTCl!WN?HHTkLFx2_67{b}1{F`vsFEFJlF>42<4G4h=*y6oXm1^Ie@fGj!iKgD=u- z^_1+Rp;%z`RE34*Hk`n(1|K|GKRv>PZa$9YYv_d3Mwupi@#9ag{_^UFa{`U`X(Ee| zE^AqfLMw>>^{KRi@U<$na*7a1MVN08OEV!@<4w*ygSC90pT+vWegue0|Boa4{O{!W zq}#0jjs52l>_7EPKb}oXXy5Td2l1)c#)dX(%WjjzTlSh9Hu)^E!>pv)w`}{UbabmK zGE2AFE0F7{b^o^laN*AX>xTfUnEy{s9RI(Q)8l6TZ{~kF|L3#$imJDwJ#9bV!g*=ZZ^H?wPxuGk0}D=v3H5t0M+J zt*IE!MY6xT4F_}6{Uez|A^}7T{RtYR4I$U0`P2;_`!1cA5Me6bFX7@!EMsvD&3Ih_ zwH1g{u0_sN52I&kis}tn0Fv){kz$wEWn&4Nrg|R|#{d&(NPT@FopJb4Z2&efpsQ$`tBC~Ft0@G-j2{&(}Y0AppwD5F0ggj)t=OX|F zs7sufX9W&`a91yJvR{zM;79l+MI2g;mNN--MfQXx!z{^VnyEO>-)Fb6xVOGuNj+{f zne1q=2ow%5nUuZ#qMRod$u5h+JmUN*7Vuy7{tw2kpKd7sXDR-xlmF$Ud(>(6f7`eJ z+lKs~hEpoeIQ;t+@Hg9($g!Ag=)+>hjQk9*1vfI{O_~QkthGpQ8WMln&y9j+4KwB?XdH6_PqU^y_KMKv^;baXkXps0`aKU zvS!fSDgys!6AeFY`4z*S?;ZbFV-^O8Gw%XWrt)ewOs4_fyxTxvmJhVRtDqLB5BdQO z2EOD3L;c=e<7GH4f3|3cVxLC688NYz6He z!P5$sd#DSp`F<57 zq{D6kd4Np1Uy?DhErSMIa!WFVCd~7GIL~wb!29KVJ-_ArlKo50x>S{_BpJw!(7nmt z(^yhnSFKvL?iIKF@T~EduljEm{w*&q(qH(O|6BasoNLZE{~{LuatHrLN$SPWeH=yU zb>(jQo}b(w;Em+ zzZ29i2K_I${!0rBW7mIqb|JU^OG^uje-X0}>;KjNh2Fql5$jt{6t0NF;V3z&iQ%Z< zZ^iy^BR@&sInKYMcCz9K(H;f;F8&ZA9)*dEH6|}F#lTDB;C($x#MKpjP14v){o@NR zD`WxnBt+1-JwOSL^X7!!^8YS>{)E9Xp}xZo0H#prduJbcfT*%UYf`*VKOTMHh}2#qtF+w+x3U( ziD-(GG==6H4c;8}PBdsF*yV{ICQ;bHCUE0e?eC33fumH7!|uu^zV~c%=bx>ewS%pH zZnidmIk4cDK}Eq)4(-+2!Hd;Oo%(CEgK%XM-&ClZ29$8V#{Q4}zV9Xe7a;;S?f=Ea zJpEr@!t?)O|KHXA-{aLrA^@0&RDh8-^^RdrRnKOs85uZ<27WvC&$$HGe>NHn#S8gC z^rCn$>U%b&uy%BQ_h$Qd5F~x?tkH%BUDcB-8+3VdKRs*K7xbPAdMl#xT_*}tF9?$< zxmRPq2V}*qPFKW)NKS*H7{pY^Zh^ngX1uY{jbIUU$_683(egAUuZTT&i_04*BJIk$FOmn zMsgAi;Ln*KC$P!%5Bw61;tp(^M#qC=)oJvDw*TJmG-m4E3-}EM;!fkGck1_ozRyoH z^~h-)`_SND9{&9S`2VwD5O=<&{^z>=Kf5rWm;dJ$mLK;2UHnV@6pq1um#O~`t7_Lb zW@@zC8#50(_|L!p*LOEITf5I&>$^J}uh$RigYF&f|D}cHrTqE7{2>3|&A$n;4yNgZcmLhO!W@v854kA2740x9>z7eSZ;SDmC-v=;$G z9|z&F@Iny{{Sf|k#kt=Hxf$OAo&|9f4*U=V`g31+iPOotPN?(%czERFfe48qbtTdW z-kxFuLoZH)PB8RP2!O5yuqD9ONB{OaDb{xI89Ez`!XUj6o;dMhFG;XNw-@`q@ZS$% zfPUEVk<%AG(7Fqd_-i8ekG;6t_mc!C;vK`QcGSIalHhmv*$on}9rU5in()(;5XOK% zkNvRg$0F!L`_vzdA9?_AAOWq3KD6J*_OfnkPDq3IxG{L0;DhjnLm$S9B}DAefBk-N zOwGVR6aW1PN|`-55w@68YjwRk`zd^anIw+0`Q94<1ZhHT|HL~BprQ1{ON9nHd<5Wv z!~(70s)=Eg1gL{Bm&yskPJh((R~%^`kr8|z84;k0C-UFnU9|V6hl~> z-iW}^4SGGskF&r(A4ag!i2|C0PXbkcLI6OOKFqVz@rN`v7;}=wfQZ;nCk_w~k^z){ z9(6`ED8PtwoL!K>bO9lIG+jT#2PnLM5}gw!4giNvE@1ZO2rLmnK@)QZ{-6y@V*_y% z@^HL%-_Ic0zR1uL=VL)mO{yr75mAOe~5W zuY2Z603F0pzYo)>L1)RRkML;#B1Xp^Y@-XB2GmPx)T%}?=xrGF5pdkJ*Ez+;UX9xQ zphI8d;0$DQW7DY5AQ&Kk5lBf@mkUCamI(oCA{li~U_&Dgom?c;2X3%FtUlmT&;h~O z>vnN#)JW)#Mky|PAGZ>Y5u|<+I%dSKTni#Qu%rPr+=)j0E?|>~Q)vTYw0*(|*buRg z7zq0(j$mLsE`gc{c+umX2x9>z2f?KG$sQmk)~8(^092hnK{J=H9b`ZxqDGU~NTndtsFo%qVdR~Cjj$@yZoK+n#8%GX- zD4`c#;HsyD3uCdeUOpfA=+mg<;P`|nW;Q({Z`ecZ58w;{Le~vaBtFnRHI$(h{tEa< z*T>~N4X8A{fmIy&67$rilEj82Nuoapjxd71K;c3OkrUXqxg&=tAAD-z&6UurNYq=0@%TPgw?6(TjG?qM$s zfD|!--S5Dm<~Ro>W5w0%10KPtk)9BO0~V^2DH(dWSWGL$kT)E^bk0xcn1m1A;4J78 zl}}&|@D#z#FVRdjg(L%rjHXm|VNfW?s^*!MGSVjLlVGBW2X(Ipn-Ka{#eElWrtj$O z3Wq|##$!(ntY&#)JkQQUIqnifNs@elI{gLICsj4B!a~b8!#wN^Ti9(CoGo)ZdF>G| zK2t$P35ihW0qnu@Q$UUgrWnO3cTNgPh6EZFplx#@&20$;mg@NZ=)5l0`h8%FU`;(b zA3-$hBe{!xJT&DjgYXQFxBv*gd_koEUT_)^{Sz6@0MvH?r4aFK_TXbHi6`;RNE3fF##HJzC#u2 z&U3wz&{Urm0vQKb$PTa~dadXH>)H#UVhrIsKZ!&)BBIlSvokuU z!-*TFk>$5D%;z|Yx(*O!m<9IM^RTESLl<;jDk6mQ@&Rge*d&PeFb_P^LdFC_9!K&N zIYg+!^7|efV{pa}89CJiUS<Lw=CMHo;-n~FG+yF*m)4}k@GR})h2Ae!}sn&X{8r?ka@OdO&aZl%#MsJz>eP1K|KSSczS z&BnsJL;3K|akAD|#0^b2y4sCJ&E6W$pGE%P-df+>+28y&`oFo^g}J=`uQ|W)AphUR zzx8N%!TjJs}(?4h?iF)ZdvVwFFCB#i2$>@SWH_+!k8Wa*S1ti3&?8_RJY3iiwBeTS6 z2=z(J7O0bmgANNP%=6$F)aQNx94z;s`C$@NHe=Lc`r_BO@VzIe5_`_HY7%?(jm+lS{$O}yDU zc(MEXKtPGTwVi`s#qM*lw)3m_d245*=4}4*YHxFYU+nIQt(UL1w>CFwVryr8`}M}w z&QIbQ)Z5uT5ZhZXw+^7ugI$3g%BHq9q26=n<>ub{3wT_6wza)=@M}#x-#XaAHlIVI zYvR?~-oe)T>+Q8Y@#^*7tKI!g=zhc5+1=UNdAsD-s6Pz0Y}?{8*f+1Om$hPL*xvRSzPp#J|Kp#R_7T-$iL z`GwW~w>LC$nGM7RD$hY6{O|w$|0H5>1Sh;fgU^~ED$_+Zc{HSM%q|CB+Btz! z2P7pFD^SlZUg6QMdPZM0I?=`9vr*XX`|-Oe$-KAuxgJD~X&TKCm=IF$(>O;%;9k0{ zlX2Rke&0`_7gSOE!+vx@dM=pf%*?Ck+>cRx4F{ny&iV|r|ZzpE)Lwu1 zvr;TuV*u^1In)8rqPxk6lrF564amQetWPAF(-+J`&zBDnCM>nY5!$_lQ@#1G5(Yj@rmH zt)KWk;7B{c5Y;RWx{@U$m;^R-hU)&lR1Is@EUYxblJzepl%X=ox^&IPR0nV*m$ z4Ayek2SEJy|NcMOM*crZWTCo1!$BJr{|G}=$*0jE=+sE(CP)RP* z6{3x{4^q`20xUU{4qB2vID$0pw?pDrTooF04rgZGoLqpE7DbwTgMbh_d;fg-kC~a< zwFfP@^!WY!^J!8C9gvoWwLfUCB3;$ti|8Ddnd#5Fsfm;5+znC}2{!E@C}C|c@^FT7 zBWus0jjpuxK02xuij(`AEWeJkRLXNgfPYH;&eTLleskfQOY1L@L)P7nI$mnkl`iA7 z($GL(7RVY1i~`d*|6C3GJN2S{Wnopxxt+iy-Cd*5g?ACnhUZVan6@7xl&Xv{P+wg9 zqCIA1FVDOr=!lhEu0e-YfD9CdG6UzMEn5!gh_WZ0;`9fBi*gx@-6J3NKtrBD= z)&=M(_gw--6<~P4_stRp1&3@9bXUKp8XFlO2;~f}kO`tm`W$C1MK=^U)7cxOrjAWy zT+oapnMS!*i8RY0DRWGgCkX$|EJB9(M@Tb|YMHGek;Zb1T>walwhsrpw5PB|BF~#k zR{<|cpp^^dMMDGf`cZi7DB}>Dr@0H0sFCGjLKKO*kM95g? zK-YfctAeDo4b4)GVO|~BD1CsU0zXkmANX_K%7s!&QuE3-MR3RI_c6qRXi8(0#0}bc z6x2hH^aK9mI2*>Gph51BcwY$(Xfk_-H`3-$ZX2$z=#4r7qUXpXH#^IxRfJ%c1K3n%A}di zBZx7^D@9B>QeZej!#usfhf)M1KEQG07RL=I7%%-;n!vM8VR|j%5L#;N0KJfwA92oM z_{x>}PovIE57k(?exVLDPD(CONEB%?p@NaL)V^0n$%M9e!kFTvPBu<5sUrJL&S@5P z5FQ8>&^&*U+YkCtdtJ(Y!1o^oaT{>+2+kt>Bli~k4f+ZFz-`By9`J>>FTs+~tB;6u z?vos1(jeMB#I|1$sjvt|MkiQFAoe3eXOIoHmWdfa4**@gi<-6ho&4r!bm=ky(&}#V zui7UBGRYyy`X$>RH+@(3gHB^XD5WiVk_7{+Na^k{x`8Gr%nzmYeBGKP!??7gI8;>C z6uk*nED3Um5#jb&p4FhCJTD(L3ec~@s%wt`Y1M$8;lw_3bs#ZmbwFl7kU<_bM#=!y z{jk{p&`lOYk2rYopPPI8Te~|)rPL8B_p+m=j*>j=h7bpU8;eA)BZGZ7%JB~xL@3$$ zsiZ5GY^D3caWV>yVp4)o6Htw88i3MsJZ_>c;;3%&SVxQ&y$D1Iq!~<#6!0yo!6KJP zI&m;0NmIIW;X)`ENTUBx7JYMo+~Z)(GX;ftbkFdZC`&+~K2hTp*|`YcVc_$hI&cLE zq=m94gW`YeKntV9_Kbn*)n!W=6)zpFJP)rO9T5u?KZxEQh$k|s@wH2@xl$zyfdA%g-IJuKT46GxRhfLS6ji!V%h9{NhIHi`YL{`4=$h2ks-YYox#{HzSdbWp9WlU&zNp&C z(1%n3P5}#&qq=yGzCMaI!8I7r(WaasVIg#&o9>2=mtt#;X8mvVWp_Bg+-w|;EAjXG zJd~JQ9#`Vuv_qQpa|! z`g#JU`ZF^tnIf+hgdJI;@3(kI?)~#+9ew^i0Mh`DH^4AbT_USZF4|fk#iG)s6dg#( z2SAISG%*V5rOHs@ohbE{_bIwX^?}`z zr4weuSowHFjJs4UleeGOyZy(Oh(NHs92C&N}po+;X z25R8X*-eghpX9$usFrO#S0nsl9H}$?#FP-baNbjq-r#4-i&hNV?EH zxe-$!i3n-EeF>%*y-mVn#4AQh;rDv5C-_`|Eyc9nOEc_7Pe(uQUkEwuk>s@kiUyY| z+HQpV>P984q7xtnz(LR$co_JC(m=y(W?C{0DARUb4R}ZrxYxosa8Ed=PC< zHco0joLi6NYAjVnJV4HMB`0(?GL*HdWqfgxRo(sBE_h_|_EjJZLv#r#??cT)Ol4S) z-bTx_i*xg=V_QcLV&YFVwYRW+1xQxt%MknnbVEWaiN_z(8hc}8P0-0uLWiq$*^=TA zG##@VB0WVCt=NK$n5)mp6a*R^Snnqv049SC5)HAn5qjoW6O%f9U4-`CBC<3dT1SHP zJF%4~S<)*9?SKk`L^eX$DU$k`bmLHsHNlvY66$fC(lcX^>{Z5-1&J_-;^iu7kcYL= zNgeu}^1(35kp|c|=D}^i9`EC!LB~zk$r)~RqtK#00)}4a)B`#Idra;xNt0D+sX^2| zIRt4sM@p6Bj)VMy$EFu$1JdUQGZ0FmIn3?Q+tZDS+%u3uKEjZ9?D;eRFC1}XSR4UM zR8yYI9ChLk6X`H6op4D?KK5BcIga$Y81OgPx$F$Y69g@1?4ifp=sDVV<=FTfT&Ki1 zT6Y;``{}6cP|0%XTn`Y;I-!*<*7+lLha4x@zo?0n^&%Z<+3Q{aHv}t(6c0GN6yr5m z&IMi+cl=N(AvPkQ4%8gT9H=wt5fg%HkRLS+aEGM$UzAH=GsOe!H6z-JVt4gO#b5s_ zFvkJ8ydNVw1TT;~67D*F$Yuh^@mjZQP#;o-X%+6Ip|t3b>PYSw-gHOUkW%B5y&gnP z!6PU7`ERziA2?ZkCa&^5}JIm`*PD5kW4336;Gbv6tQ*- zqo**JgD`<0%wAtpIv26wC#PvN{KEZ97?$_^zjD+4{d0Qzz0jH2)$;&QjF=Ux$6k;a=mB>0pF6bt%E!$s{!o;SA&A=IRxGNTJ0fTkWhblGs z`Xplh3xRDhYl>47Q@cZ--C2EIH3)1>D9gz>*-2->`N9697 z>Y_EJj9GtOX#xeTnpES((c z?L84pt-(ku-p9aMTBmN&tWp9>-VsBg5g5ercG>!2%`!7XV0auz01+EIf<%K7KyY+) zl!t&y+|)3bTLUOiL#a!y^__5>eaw!=F&RDw9go;ol9XlW%y)_+21VDi?TL61>yUCJ z!+^8zBKHZ%bCexTNBACR8ioA}8+Xa3B@vfnL3^Sf5xzOV+{IpIi_VRle7!Ur_x|~^ zCPkf|q2_D*P6UK2G2)D2TX}Wy0w_#1;aOQD^*X6KbV#mf(&3!osUrJEx=CtQHY1x; z!=#x(%+ZP&sbztzHwqcN>afbR(`v;5k50T$2CtHzpOV6ClVpL1WYy1>QY|6!Q4p!m zezR(v7@irUk6t9{kZ6xcU!A7tqlZ!rhC7RWv<1;Ap!?05OC^fEkpb10*3!CoP8%i|Fa^QC+82}8H}?7HQOa<# z&XGj?I6`KQVUX}74eXDBi1Donw1+MN8E%H9rm&jKn_@^2iSoNJOmG-Q zOZg4hpkfV__5hy2U4jF;_%d+9Gmle#U~`f32`2Yf3Y+hon#>>|{9u^!)B-w`aJ^}> za#9D{u(XI$@}af6j z9%&!-#P9dm+=x~^*!<|hibUZAld^<~WHIo(0{YpNI_PnZWE^@m?yy$S#9&|3JZ`IT z2~G|(wa5byIVgIost{r_O5w~6BMA`dfTE5)vhz{vQqiHj{W30Ll=eA(o&v@IEEwsp zG%N&ECpl5(Cpz%bC_9xW_&`KXCOZ)|Q|CUoHV3Fii2{Q>KhG@C+6OOjFBGWwR7ZH_>cN0*?Kd@tCS zD67MCA(2R%TnqrDr{qSQvt_9@a{PYcpA(sse*dOrRoe9>x^#dM{t*|IX|1#hVbTf* zd1Eyu21Yhu)Amb~l&(nDh!m4o=G`bQgat;AHf~NkCke5#Z>j~vX6nv!cJPsI?#dn2fs7 z%uE5Y;^1P)r&z5JkfC!&WM)l{_lSek=kyiQq>Cpm2Ac@xw=lsE;Nr2bGT;zPQ%qY#XkI{q1mW+t#p}t3_oXzW zje5PF@x0?bZ-Is+%sL!L6mwI{0nMPK3_!2b8DUc3RI|Kg7T0XE)ky^|t)NlAo8KvN z{~pBy;l{nAa*q>*jHb^3H<|GvJ>|t@)%IjQDj0EWsn9chu*7XtH3#nvs_EB{>-I-S z8N3&lkLrB3|f88(E~$g#pIXhxiRhQcdK7Ed}z5obbDF6Lg#RM^bB z;d$pJd>|N^f+%kr$|Rh~C^J=S!ArZ`G)eH9nUPg=d8ADYWu$D@D>=`UNA{=^!af_y&CR<}_51D>;;OmXj5!uSmgV zaV(p(HJO_5wADScbt_)X(2?WuMw)6$h$T-hGo*}}JPj=jGQw!Jb0TF}o3ww-(mi&gy~CEy`HGo#l{tqLX1!{lRR2oY1wX&KcHvNeN_?B*b|k@r%zGczFLQv2A0 zC@6)H%;E`!zBPvZJySLvX|^9)Kg!4xe$jnNwIF3cr;Tn^qL1TsC^9*dvTiXJ`f-iV z@gC_&aq8snBSDer5mYU?yVwIpB@N^A>xE9?u1CpMv(WZsKrfQQdFnXZBt#qoiq}kY zMaJg>XpcRaUl4dJEq%1nu!m@a@q6sw20Q@edtm8f5G9;y4AH`<2xrL(QwQT*b{rDS zJ$XtSo=L7wA7oKL_=%^V()B3!Ep)D7UhOvSYk73i?zd73N=iJ$c&j4OZfkL=>k}AI z{2)g@&QO=$($f<8^gKaldCtjvM?fi>SKPoUx?%r#>U!0-V47&uCGP022FfXt6b@tK?M z*gePtDc^(qP4B_Xhs{*BvE?Z#8Vvz;5vE;`#_({SM=Jzp3eKDnEkooq1u(~?WKkFy zB$mr9svx9e1gh3$u|n6;gteNLqM92t@5kZdSy77i4@yGf_Pal zFQMK%)IOau;Nm1Y=gf$dEjc*_c)r*9e6oGvaT?HaJknkB*=^7O_2TdKIS^R?J}aXa zGrEsbGK$fn@fsDajl>(|sNS?}#GJO|WZLiHc}`!x68pZ(eb3D{oAufG67XOoQ!?zM z#h3Q~3^2-X0WQ)#81>%tjt{fhYn)~giY7CgQxH2Iml1b*g$vZ0284(k=Iqq%TYFOUW z2r{f;4PCLH<=aj3L)KU_?z%84ifxO5T^A(;3(s=!%XQ1Om6C7R!{uJYH-AJ7yo^5)xYc){3}qq5Ac8c(n~)n=IzKhruyS{ z{A3Le3R0w97pS8;+1uScz#cMxFnHLYgse$UH^I_VF+eGiWD)mT>|;)6dmNVBB)i?% zeD?Y$p4sjw9gb3rUTBYwO`?&t;w3Ap6};OG%RSD7izm9(7rVPZx7a1?gE(wq=a}`N zg?TEY)8rkzUB~!MHw)@i#$fjO$s!uH>5ppG^|-h82wIb`-fR%0%(y@Hp~*Nd^6)6( zA7v6-BMzB4Ke=2K#zncAQGp6WryQw(G;9F4$^B(oCg|w&eJ`Xec&JILIUGL3N|r3~ zg3KKfXiGYozU9%3W*{GvQ6KoUVRhUT%F-m_9zOHZ@|+m?d-kUF5sgnm-yvo^Hy$H& zp491PKSu^F^nAb1DGFH>9Z37Qkk=bB_K}(q)Sbp+wK6B4HD5-#BGvstc`$Sj44wFn+7KgPc7%;@_!+<{dzg3KH>i7<=Kb( zfA28=oA%`Tdh5Tu{1NNFv@|#O7cp0_>$}Fj+UOqEKj)TlANK#k!qVcy{{J@XpLzG( z)%|Zv^ZESGQ2OEi*E{*wqUD~N7MBiPYWiw#^VRmRt5c{2U~TMq6n9rElb86h^=5Z( zWB-tTuH)}_R~6)WfB`%dmC5XVMY#TNqAA|}NOl=VUYV*|7n4(na>u|sx^JN36f>_% zik*h)F1*IBE7JnUg8mZJN;arub;=&rQy2|vFIdx6p;Cvl?<&QY##rTNZrIoftH!X@ zI~dd@H;{F9&Ag17#VPdy=gM)EtxLGiMN7&$WPJIy`~UYZxBYM2{|k$S``_n*Bs}c@ zJNSn?_fUK%+=#PMNwwTNbK}N7rZRB=UkO_~XQ{ftOxV2t6_KK{e^J7-^ zAvzvZprZlL2#ye~5Sp)u$rfFRC^oT#`6jSZsT1@kp zc_NdS_?||CQ*h)t2tfZ`1AS-hVC$cot<7H!0P^C)2SI=n6^w)CunBUJetV?4sR~p} zra?%oJzfm}OYk#r!|BBkU@;WOc#4yUv;JYsP<)`A<-%=F^H6C0Wh?d&I$lVZas`w( zMmFV=rkF!`5)LBUd5xKad<=h1{!!u6I*IycehX`8@abL%Py~=`0o^%A!RFPQjYku*X&Tm5^C|&ek=X1T=%?D+rx59{F;ayBHM7 z$Z+0ubdNA{o?o`haKSG#tIU zq+58apsdjIP)zD?Vs%wCW`NJ)x~$K zdNr`Tx$qN|_CWcFpqczgHg=?f3#AR#OE^;m(IEr5)RNpZUUNvle~!PA=%}=4N!D*7@d&6Dv^G!d3lABkagPSmiFrB(H-u zGg4dNy9!3SR4Sybxa1XcUDtHBkQOJuKco{>?m_tdX5%-BX-2Nh7AlscDKTBw2ijC2W2Rk9C|Xl=e?rnD zU7*HSo%Xx_wbIgI#HWi>k>S@LJqU|LvoC5B5hGhv!IHVMuA^h)OE zR%UF0UzmK7pl06cT5l_bG3Qpx=ph@bE>4B>i%^+-Dn)TxX+QBg4;N2;Bl$1en|CAs zHJi%?``^OcgZ}TE$$t}Ke*~K|zE}~`Pt5d}*U>l51eCNK$!yP6eb=M%MI)CC<32`m z&YaMm^?1iIM*?Dq%Q1%S1V)~PI`v1HammL=h0J2g16?&pR-lj&k5!nM`xpk(l6RKF z6O?WxC*Bh%#j$Ef#&?~kAe(^vf>$_ovhd0yoFN)<><=3}b zY1W(dxr&3sQG;Iv!iu~W%M^KO)8claMV|Hmy>sE@v*j-k(1ybOjRCLey4~006t=)# zWo>A~g}Ef+1xQeNzFME4xdtxH=ZQ0x6CCs8u#2p?lXCh{^nvo;U;3|9>vyF8YnIr5 z79R9}_k#X!7lZq4^9vMyop{IoO76Wlblv3SgX@M7{C#(O3Q0Ghqf@ge7;o|lNo6{< zG>S-mu8i@_dTEm1TGDl`rNQ%0^x0|XcEy!KUpA!=^Tuy7AGKFk%k{4+*Q=F{6 zGP^Q=Me{}xp-?*0LF(?HobF08^DHT3{UW?>+w*r{qH8Ur+)znY>2ek_`hx;(g3{Or zjEwxv`5#38)t0*x`aipr_y1XL&M!aE|8GbC^CVrH&mSwVd2#5)$4w01ovYXDA3@*O zcVE6-+u2}!Q>K%Vug$$~C=^_Ggd?(sVwr1@?%v|$(7lX5KQdK@KH{)(SyQRq%Ct_p zap0MYpMlos62MKvXr+S2%=BYrrgG%@MG7#S0kieNrl|aD>Tu%wcW}CXXf&o(_2RTE z*_3JE6;Wb{;)6@;W$f}9kXS_npm^Y!|LpW1f8L?}f37*ZoTLAXi}Mfne}6mrZ%P2D z!?v%~(t&IG=3?v4!HN9&L4;-O!GXo0k0jR#G{^}eFcG2`s|y8nV&Ovn(2N{GH4#TJ zpQ?E!Ut(SR#;PRiW|*Lti%%_`95$3i39_omm?S50QW1yL31(gVZ4{h&eV@|!a2mZo^a4{DeKfXj(zLv4TnDs zrf}+)g>2iM>NDH89< z6O*MI;Ou(E)ych(ECTTb4+rU===|p#7I$|3Hy4+e^7_A7DE@H%--q)bZze!ebs{el zkO@w%Kk{WEZH3_`bGdu0Jd`?9iOwcllI6!sp&871Ng4c%R4>L=uZ7$!GU=d^V5kbM zP!67JQpHrqnsrLqAS z`FiTiKIM{OChTe8-IT4oez$sAd7rbzSLieVuG{uvzm&6RR_s@;=UdyGt2vJw*-)kE zcB+rYJbR&76^#FODKTcg4)s(iw4^-QN}8bvhw@fFe6YZ9FJ$R5`j1@K9m;=8%gx1t z{I~Ex|L+I=R~`VwiZfA>qFj;eQ<+1_ufG$LPo#3Myg2bW+d@~l3{de7$YVfa6Sn&6 z#xb`PbH9{>joMhtOd%Lo6k@UvOdQsYI+Q~YlfKavPn1eSW?11Ck%+f}_@AQDp3{3{ zCb1(m%_`kO&y%UDixBEOJNw=oIHRDAWQdo_0xb@J(oyD1O7~0Yi!epesGVSf3FuXR zqa2-G8l|? z>E}24d&Pd%34EJuOo)b~N{WV1B@=pVC_iplPe7{_$=OGhLCabl3jp5vDLSN|pQ1FX zz3Jf@-;MF1w_O*ZoNW%X0vb$zdMe4%vWnm%7eRIzoZuWSluKJB%3a-Gp99t#r^EeJ zB?QzaG2p;&096pv(|BrfwkDdhDs>p9G&5n^_!sZ2tO0o!d5b0cRiRRhsb~IMc^g*5 zs9crVxl6ytiG*O^qf`Uit-gT%2ShOX_^teoi49|pe|Ivmv;Fp zy&J2z8?9Z~f`iN2iFl}>g31y4r(xA;+0ix`KdH**_TY8&M?ALbAzdpW6FMB6=G>AH zypDSEOSKVsp`@#{k4d#*HU$tEj=9rW+&=pQa6|UQXfQodfuG;Ie^2mFf+%m0;jCuq z6aqhylQ29Pw9|q$S=(!v4e+WloY>a|hK^LiYBEZR5YL#P1u*JF7Q7CI#Tq4!*794y zubMtuESC0OxH5dJ&0ggA3!T{gQK|gboS!z8+{c?UYj)DYK;8+XxvmR8t&clw^cvC> z?_d#s&n=D(VHghQfnY8s$MqDJh^bYD#+Q$4{GBUG4B$pqm;%Si=;W1 zX&Cc^@_ilZKxd<#q6&I2(|Mx0M5$?1&d7>x3k@@rlhRu58m0rhDK(nRrKSb+9ExSz zBv0xyEc%$;YhZRh=)u^=84bH3GQ#BLt_uLsTTR+QsG(0&CzQ(nXtlUQ`|tdGUjMte zJU{;+|KAt?PYQ99<|(NH;1sJC^(iO=$o8elz}-rzh|TJ^OoA()O!H*^T@(k$fo_9S zZyiyt z;>ndOEKK04!Q~t?w*1QQWJYXlDR<^vOlhfSbIz?ft8d!2^Y(8n(8%qg#th}5)1WdE zAt;NuoD%(~7~c9|-~E*HALZCP)c-GFve&%+fAJyy<361K>*{(AQ`s(DF2zW-kE>14m2m~czpuDFx?FE+QgODoLC6eJFA zL3}?;*&gb3%ae>CXih}tGLRD_whotAOdEn7FRimrV{7JAK}mMdWdG7-?LV!)M;rct5GV4h+I;TZ{2C&*9QNt<8Pzl zOum-7nlsk{Me0+22xciJ#5Qt_^4?fu)f1z?oE|xW=Zb6GuezJO^3^^i=$M4xQwrV#=ja9{4b|5WO;i9zZgzUi4 zDK_McO_xEt^(r^7-3F_=eajt_nqO7TJ7#)D+{d_|uS#-{%AJ3eX>4LEmui{dB8|mW zqgYj{q*Xo%gIH)r?Q^;LcPE@bZ4TdyfyVn)TdSuCx9Oxy15sBvmb&FCBa6Oy+w{(@*2P-p zcWM`8@ZH8ER-|+V^AP6Xcj-bcbl{a2v`)}uZ71I3!H4#9{jX?;e7;NVnD`Mkgkm3- z7JGp5kcH}w8Q1^up0-w7V?Au42U(;=a!4V}h_(r9V&Nz?l9rEk%{AMrTxWl?ZmKnJ zDn+~?i@4sqU(zJ^&GmnL`TO0)e=HZ{Kbp;jhx7j)=>L@WFQbGch`B??I^|`-Lrve` z71M-eXCbHH@(MAQ*`1AiCK_isd?n+fz89B!tY&V-ie*S;vN9{nm>JobU9Nf`gCH{6 z+8mp7+oI=+9RGeDIlf)crjaG5csdk=3!&)V>u0}~23jJOw+ORY@=`x!wk+=O)!ydw ztzXK@VftG;2X>*ximR+>%73Pm#7h=HbBSnCRLqu4mrzdBo$@gjgHe)(dMyEXC3Uag z2{(%pG1?hx@l=C+dz5dnN(0wBro_rA;Z*F*DX0Ie^tdznzr47-Scv~yexU#Nf&TBY z{!3j2iy`1svAV>VFE5suhb*^oJ@WMJiR%7~t(T>ni2AEIul9Bib`O4iwb`;t>Iap} zoI=zov&uSfdZ{v5;h2p~02Cn7jePQ9^!msX;=RtmVR<6_TwWF(bc{rFnKAErC};{ z;mj?kk;8iOVH~9qIalD+I64LoNz$PsFKo>zsYx$tPn>%(jtiT?%VxWN9J4HnghGbO zgm47>?#FZ)Z8`$chSn$&dYq2b^FKkBySOeD=Ss{y`5;UKks~i>aL+BU-WbKe5M2>v z{m99U=ic*eWHs4&6@iL)s*?_@YafVu;;er#XAM9D5TE<-|H!Y9+#89goq7SP3DD0Q zq;mf_z)Rh6*<){rCFmAiF&au9B)4|xNvYPfgGteG5CC+ljk!I~{FbiLqAHueY#pFS zO362=EM-A$-0C<|W-h@ZN|K>mGWgnWpHjg9JC*{^)B{xV$gc*|TA(MGbZTdu4KGkX zP41crPW>p$i*ZzkK7&N{0@Y8vxa*>miWH`NINr?L)u~Ckzk{dRt<$KnhD2dl?J)Rl z#2OMWNoy$KCxUXz11ETj5n3I(zC5JlZ6n?tupel&{UoA28J}_B7Ox@c9(=qxAV>yv zr$c0<9L%Ur9=8d^?B*G}N=w1gbRD@*DAD$X%IRNgAKE z$Ba@{!#iy)bNv}gwl1bc8)kT_Enbbx=B3S}vT8m9U;Z`(8Yq-BZ^01Uypv1GXPe5% zG+oH!A@89uZWnN5da9{>SlDz$X09>-L%MP}S8$z922of1@c!Bzv8CegWGJGH$1B?; z-JsWlEl$CTW*rPES40@o)=&+pw9B1AfPzT^8%6m^0{XRmA0?^L5XMh=z!?3R%+by8 z)I{jBQ(oKG`$ExzXq0yGN^-){#4?=V8|82%M`aS?MwUd991wAa;}9F|EO5peX~cls z|Fvl$hax~`52lq{A%%+Ym|!PU*dIhq2>J#iVbBLl?nJFzD=XKcy4JiE%Z%%mS41gE z3(a+>!O->kfrs?tgLtd`_4uy3ShZv2@gtUB=qNd6f|F)=rAM!-zzdWFa<6D9Fk0|(!)7D1!>;WJPop#iIG zs@&l!U@AgzPrjE)y(JuZ=5ik$`=K9uDeoks7j>EzTAsYjzq^{eY+eaPN@NTL{x946 z##)>Oo()qBJhr+%lBA-4QFr93weo!yHn_rabC*x%Yh@_Rs#KGQo+S4J?R@I`GHgwG zoesy-1f@vLPh@PNWC#KvjlA=o7m#O{m-SebQ4E@g~)kKF}DUs(Tx;XVcb-{pt-xSSnB+-}3lI zRfG(;Y3++*vjHn32~~MN^gOJX#ngC>O zW7n(%?Z>ZG3Dy^u>gEQ=w#Ag=^A-piu+}HP6(__?)N3a?fLgoRmpVJ*YML&%<}MzW z+QTSf+{j)^oo^jG`H}RmJho8n;J12&S+2e@F_yQbilxDZ3j40*=a2+me1V( zaQ#m(xWoKUvx^1&&*Jj@gZ}3}=zqyHue}fqH^8E#hpOL0c|XiIxbKq{DVp+@*uaW+ zX%?IfGedphj!0bMX+6 zoq!6CBb9l^j9#dI{B7(lmHxLh7D5%`NfwLo`{_zv@RAice^=>E6-KHNzocG15@6CC zZpCI{tZ!lpCkUXu9$kEe{`egBXLl z3>z^V$(=NFKqnWRLm3SfbL^)r=u^h5V#>c3>0?`F9H-@mBl84NB0hHI z`%Ze>zz5im{}KOcG!FmOcsDaio;8L~4sr}SGl>G)BoAo9Q~i0Z8jh7f4z_NpJV7BWMxzgy?4E?VURhG;%?@5U(}>=B-Gkj6m-?)9mHFnM0kIY5bWZ234g9ClhwB| zs*b<&%AzMC2O9W5|F5C{6n^-%{lAv; z^nZTwf&Sl1`p?m*d;l1Z9k)IUO7C&Z-|q;o=1Q)K&WsxJ(v{!GT(o#?^7WGG6e8w7 z)^3wC+T@0tnQq8SjpKO@oklbwcLWSutUIOlZVELlnW^(t_dn_q?n3@woLwl&{}1`! z?!Er+)|>ug^O7jKP?GA2G7aC5#N-zDu*#&xxYs`}V#M4VU-C}(n`qtb60t}-EWbC+ zAxa+SxcRa$Nu@A3Dg*Bp!2kRp2rV9hjD=`aczRH@gT^S}wxpGx#s=QRGN#97H zl1pkQP5YXdXUfxZJ@0fe!OEYN|Kl0of&Hgh(ElzjKG=Wm1O4B8KkTC&=2|llY$0@1 zyzOaF>esWk_0!hQrxIgE)Gtqt3uy`EI7@6ZrNwTSA(30Koo31$Td%ow{L`t>HT(aI zxq#es|Hne%{;#Elr3d@Zz48CZ&PK}{Epl~jO+@W3UHgwc#JK!TFX+e z9T^dW8S63gF@{|xG2|1?KXDi>IgD#vPV59K(qk^mo{~ACnC`sN{n~gor=7VslN*{$ zJTXnfTWzYBRvL1 zCE1s}l&moFlB>xImy^kRn{yYGm0nR+c1cyRyu@ zv<$(KWzIBG{U&)6X>JQl85fILRm@bF1QXn|W%4OPlMv z+#@cV#Z_)-=1!X~bC$a_=6l6hN``Z5sFPDu=Ck-gG^eLk`W2dKCL7D_ADGyV$Zj-B zhoiJ6^8m8IX{@geDS4{c>INA}mCtcHHYbt=RTail?xJX4oM&NT!*Wa{vK*|NLCR|9^40`EdX1x1;~#GC=i^xh3`xFH^GVeUaiLXPnXb!YvS1 zW1Q?%r~l>j!`UrIL3kFOGBJQ=)cs7^!6SRQ!wCKB&JUUC4Sm&Gg^R=SMJvVo2eFWS zUpRf^Oaz%Tvm|u#uEj>wY zTi()0GB|%Im8>#W%h~BGGK@6F1ps8CyJRU!o4DP56Osk6TDbZY!#4r`%bQr<=chmB z8jP|+%DhrozVFQS(=j&JnYDA5bll<=jxTIRE;Cx&b6(NGi~6FHin?A_t455=S4z1e zTP>9LAWdv;@G`r0SB(r4(7@!IRXrGKvu8OV$t8EkB*f8lp?eqm|(FJke5|GVS$Cn4Y-tpCD7 zbN*rdztQ?1`vaNCu<@=jFMF`@inypGu+g z`q{7BThCT=R(?W&tCdOl`9WXyC+Gk2^dAkI@R+nX<9yeV^3fPyV1TGn%%boo*1<1is_n zQ}}a~_%WKJr{C43S@<7QSr<@{KFTI#l23UJ1Un*xUDj@OqzxPI&C?>eAIEf;j>tBN zn3}kp{I1^Vdr4A9z0%c+pf>|QL6y}NJ33%8K=>c3Jzxew=y(4y^$cWq7}d(kmKxwR zYAcGb>oA^S6n0x_^pB|(IUOqd-7O2Z@ampul(uLhEgm|8p`<=drRAS_eSM7>z7dZf zV~&=dgdKSoi0hhHA7urYwt6##yQ#*22oPOr^8UjFaPjhLI=ewkTx2~E<^(j<;jseG{{`kj~!YlC)u@S^|KTPAmPxR}0 z68!Fq6)|Tt$B3pfMQC*6f8|IgM=6F;lDZO=?5HuU@;3<5z1sYYA3H zK^D-m6gKdFJaC?v&@~`YvPDav2a|B@5B%52!I_~Ft~-LTrLgg@2*YXn+bAr2y@@F3 zdr%GHz{=B)A`#!<{7>Re#i!unss|23OM{STtc z1OImi|JK)m_&;4=f9g2v&$rip+NVeQ_0-wkU0>U7W$(@Br_RRab9#$^Rax~ed%}iw z3zJj$Y8w7#1+phDhR^aB-VMF`?7vz(NcH=vdaK7}KC7?W8`+objqGi%l6;}Q|57OM zORfZn!De-MQeXBD)(&19-}o8kU+>hT73b09l$rrf(Ht{PS^ac7c;oWqQ!)7%s@4m4 zvzyNLE86$F9%UVDZ)6?F(PuAy(Qmkytbwc!ObTF6mlwmh`L?+kC}50ch6nJV5cpHb z|49E))l)zD8hzZP|65)v(Er&7|DU`0Hxcwg6wF#J()+z=wVVl-Pt8~Q-R3Ww>#q+m z#Bu-i`ugVnzL+if_Izz?`}N+YXd2&IulLt}+7xq(f6H2X_IhjkU~8wfxwH0cdvgQI zI~b*d<4MwZ)ZwI0tuFB0eChUy7mFEu_aj9$q@vgNj*}mqEAeJ`Zv&2#{q-Nq+n`%b zu#LjYnb3cqVtcv?)rD+zdu#u|XcfCnPFgbZsMQ;VomM)fONyCkC@g!Cg^a-?_x~fg zjOJPpGx!&!s@&XEP4u_L;r65OxYdn1^o3sWck(~dAL!L693?(Z1V%IgqD9bi#_xZ9 zDaT#&|IMZ4y#L?A(nJ35JKF!_?|*XuD^!f&EQfCyPFw5ixvM2~d|jtgc3FWC>+7rV ztr+xkuA(!rruJ?5QH&^D4r+BeS(F?-T9>|jr+el>mGsU1cx~7qewX}ch5_nPbZ0Aq ztLELxWc=sUh(fB|WSYW2H@x^f2ss+_1a$>bvRdiVOIqy-wojmJFfn<#zJ4_!pP3!Tcl1lWw}b=uYCfwnBoM$i{A<@!U$Q6lU9-A8BmPfCOfvsparB$VN!kSwuYU5xeiuae z%0U)I;f&&C=o0T~$6$u=#gERV^9YOkz|K5k)&y&|N4=Vu83J?i2B}YzPy44(6Th;qxqn~qW(x%+VOwU)CGUsC&=`1KSTWv zxjz0c_e3LvuR6YZSQ9(1x3_5^IAUF7mETi)k8-1s%rMq5=R`{5smk|>4jh-!&@1Bm zq*4>m7ch}r3jP~L)70%1ou1qg#p(30jkjT?CgfTo$Yq`m-9z=OUa!Byc4u)oe;)Zi;|uPV|DRu2TrBE;XCL_g zJL3NZG5<2`$7Bv&87z+%mHKG0!>c{@Et_7F1jm%1D8T@pHfGCgCuxw5fX8+w9wEVx zpsM0m&=+2dm@?e)L*Rv#T<{Kcu*3~_h9l&SC1;Gm8uarF zh8e}w()tPJvI44b0S_H`csh*go%489_q!v9Znj;Ih8J;ge3FW(^=Z-k``?$`IY4oN zl7ZNddg(dFdOk-v#AEB~R@mWdRt4WkOYozcR%5!F6;p^j!~3c!1nOA?B;6Nl#~6&e z{{kc@jbUGs`V`NO{6!69{x@WeS#@ZntGK^fZk4LiD{ft2+(?*+jc4HN*)BSByoNEnHqiJ4*cCs9&Qt zptN|ib?{>M^?_L1`Bl7G+uK{)Ir#NQA&uq2#~3thD;Ny>m?aiw7JFfO0TZAmUT*HK zzkoVx&$hO=4t~W8m7i}N?4bVa`R<-rgEMjOU~B#L_S&9!^?L8s?*3+7h<)FechrjO z;M}9N0#J7S)C>BFn)|P?yz;i;6YmV8h&z4&M=fm14xr@CD@d()sBhw3lp4T<;cfL$ zfCe@NhWYp;O@}Lu#`*bq9mLOi6dyPG+)C1Tf+M0qNxzK*9!%k9Ro;XSdw2f@NKD1o z+7N`&zbWOdYQxT|ZQ@zYS#(wn`^~B&`!PS_v-NRf_h7YJuV$ZK?QK3^tpZDIyxV{M z9Nr~S)ydweFtjQfRE%=ds@}%-cA?D6wg1}PgA&fGz1^RXJz71|m-bH19y!GAVm=@F z`BNxX1w+v}UT|_kxW_5x(V!@;M^e+#Bn8JKcYXR11-1VuG~n^$j~wcbnukYjN0(7O z7t2I;8Prkai=5d-c%+45Gt-Y`3=si>bT#5fW;ExpfRW%z&gD{edF2|416RK0Zmwv$ zVRGtrI&KPd&mT-Xk1YIh-|&6j!S8^E45lNgg&7HEB zt0MGXz!W40JNu2znh1Tr%Q;E##hz{wa9bt1UlVyy1i%g)7B2{Aajg`(cPcHElL1>009V?s$?z?P#9m8 z6mL+g-)*5PfAt7;q%H}5E>dC&WL@odk4S``yp-ht-Tp~gh{OlXcQzy)^U5Uw$=exQA>Q?==K?IBzOAcA4kjC=_GnduN`<`kG~9yDHr^s z+*wg|_r&BB90TaQR{aE=u(2Rp|2(o*-Jb;vqnbxpbB6f|{v_P)1#0LKV+GFfMBx0s z-ZUn}TECyAh5@c(8@144igiYm@(y_VC~8Pm__UA1A&GDs5gs^2Fky)ph5wocmsQO; zr=JRYzaLe<6v>d&p1YCWmLbJ^;Xb4Jq7YO%$Gy+OgwhdD2)W+weEq%H+!jv~f2)duN}g+vwQT{$X#JECxYzu(L3RgZ3u4YxvvsxJ3&+eebP^1+n% zzV~^Z7FG%8z9OxEKV+9Wv+`qrmtJpl8H6H=eGatIKcMM{6|KcN- z_m*pN%N6+?g2o2E#!IiWyDxrm*tCZ;0eL?f41ht)e4+U~LPu;a));sl0i5^yEKhEp zs`tVOlZrq)=CmzHj2n5`D%Oi)#-p5kLcUtq@`PZY0O6%9&ZWV?SH<^tN$#j>C^n9W z=LWLI;rf+i z;1Y=DY<;$d|83HL=W5stVktb#lQw$jcT$jU`xkZR5wFBy(_Ma7H+W(xRgS_;t}Jf8 z?gd~P9lAwC!zh*(ZHA1_;JYKCyz%+|)h_}-5b5k>o8meo5R|6IOM`aM57LVM)JYAz!un zQFJ;Q3e~Y5^;Lx%wQ$#JwWLb*4~W6+;b4$DSg(EvT_%1~eKbLODPS4gKEIOE1GFgV zI*}8>G+#Pc%zOy_l>QEa82^4IdwEy977R5oS;O_!TI&-<!emw^0BUIwxLujDo@?5dmnf=BFLZq=fe8fj5Lz!}?@CWMe^%27wLA4J-`=u)H7_ zcYNptPPg{O?;fV3&5pQ|BR~Og{;L3RzCQau1%M08BFT9o9~nmHLKaMrfuuh7N8#?i zo1_dD;P?HW-|yBpHoq)9h-v>KN(h|k^bJz58W)cV;qLnHk!@^|u9Msl zL}jM(m51sD?-%Nab0{)N1t7dRT!iPkS}bH)`e-o(z9{vRl*@<=-VHoBG`~n!j_S2<}Isa4&iT2Bt{k_d<{@|5|Ed2N~urZ)gID~)x zZrJkqly0z^gQHu?uiLQ3?n+eeNC z-NgO4=XEguW)LI5mfnrg%U20Ss$X3-_8BnIGbmGp0x_=I8+@WLaKpkP+>@Z&^+RdF z5N;Tm+dLxzRcL1&k58XT;D&b=bj8n}-)~ba@8fQK`ZPHXaML|ut0&scNiPBiWxMYW zk{YzZSs`h0j_l5^f$;c2eN_^4G911CyLmDUMoFs91=5iT4upsEwWHkAyO zi&2PLAH32F_x339nWY1k2H`2Dwiv4r*pli8>9j`kf=ztl(HLX-gs!93=7-;_#&%(v zS=>Htf$K0)Vk-EdZQ|WT*)mLg!a6*1vXyAg-W@_tpj=qk#l#TdIsyaa*92^5wWvpg ziDW1uB7rT~AVR*%jxap|9<%NH=v~9hf<=(|9KRoMytmvHI2LgS`vX?xVS`v3MEt-8 zwQsdens>HMCT>Bv-DfrJ|H~*V|D;^(hZCi+91u2-Yr#Jh%YdOBVAO!kUBqG5<7E(iVV8L`X<`UVFEta7lq_i}yh6+RoT9q6D7igMmjLt= z?tf`EAM$_R_4>Q&j;eawOOw0H|1sB`Tg>18xHLQW5dZy6@;{}C<6s;$sT*5(_nsdk z6(hFqr>%q5#@1eT`y869@y%7EejKEfI4B(r<%NfXQ_KcUiJ9=iLd+)wg(T-7T$jVm zQ0W;{R%9V62dLwWuPx~hyr3^Cqz#Rq;-5O*l!%o&U47%38X4U`2#vK+&l;q1Xxuu! zfYyH-1(@*)S=H#=^#{Wg1iyi(&@ZY_-H3_`*;Du4Qd2TajINl=E?mPK=78VAtkI)T zUSy~@n6A}IMjdpuf)|H}Vp7K2udd3}(xUQ@I{cq__s$$d?Cho!-ur0fB6HR|MEu1|ZKino(Z zu?mD#e({0jwi6xmxYdQ?Dw*-e&NF)J~}vFOjy(5nhdOaO#ks- zk1x*q--7-xEC8|3=YMQI@c;La{%4mn$|Hc%4*}6`{^P1*Z9wa6KxNofLxuY{)N5&T zx#q;U6lBN5WM%$uoU9DDy6AYRaG8)}He7kIJmpL7dI9{olJUy!rZ1|^r13BDL!(hO z4;~zP`Psu?48n$4^_aK^;hEPDy0!*T-JxqvYPB*~pS1}K0#D$Ls=__X$Obl!88Ovm za!S?n_6QoNqJbBEKeIbFr!YG|v|;sTnW9yS>9DL12TVU&Az$mAvLQuT34JWR+)6 zv;KF0aUExAD2(zjz+?@#fdI624Fo1%z1e73T}|f>WjY|_tZ`8(JCSk0=q;A7fcP*> z=#h>rnK*S^G4Is3iytjy-j-m5)4Vurmh-mOGO>Ud)+WNd@Tj#n$tEf(PmY z@oGZraHgvyX^H6IquZaMA2^rkIa!^0J2}N!r=<}1_H8;k?#sjR?c319B&3z;X||5O z*xcUUU9A|ER=$TG;l(94c=+_)72Y=hJ&aojj#h@RF!I&Os(72e4Xb&Kf*&`ElsuRf z>UaeQy+VUt;USmtG3dII<6=GyR|tfP#gXjDtYh#f4&JYO;&o0jNW?pfV0RMiRg!C} z!#Q(19xDGO4pd#gih2bJT_L_tU=awy&~kCm~TG)PsEMs(M+NIG#aOzUyG zf+2{SkxOoij${Jw_ZSl4_yUmV81eB@}P8|2;n@dTmaYc_H=w$ao>{S<*Fjr z^6lgtUF0#Lj7XG*7JY-L6@ye!I1vpQu_ih3+g^Cg_pY3v9ms9snp3Tc%K1mdOK)O% zOB2az6z^ogx+^GZ?PZH22Sv#UaK)##flb)N1ohL|{VbBHrc+q)+1O&0Mg!|0rkJzG zrJSzfEh~(lV=1VFy~U;w9%aIgAo3^iyoAC^G@(*Oc`j?>f1qy3;Q!gk`V}OA8}I*| zU(W0Q=jI;rzu!aszqCi@)w_&2H=hv|KFljQGq1?bjE2Qn7uZm;s%uSBvp!d!XJt}J z3!gSZZqqz${Pg3-mz{dDt>QRzH)V#0o5ox+M&zK8ji>zhioO46px!*n>o|2NS+yDU z2TlDSi~i$Y|2F!c<)Z%QLH~ar>A$-00GV=3sB{kh9SsJUJ&GLQDL3XgBQXi8H%V!) z`DPC05g*H@o`}Q8*yWRV1uN`6W=P@N8ZwnJ+ZyqX3zJGJ!YB)r4KJ??&l5agh!eE5 zDlPWgBdSof4h#YdwMG)2yyYb5*c}^Wc$@_VwOmied~aC#bIBtsxnM$AU}OgOF^RiR z;Nw0o*^1crE)@S;LCNzX8r4`8L=_#Gdt1#Geo9D_5aL~MvINu=7|eJ<-Yf&`cqtNU zUo&{;)&qieOfF;CM>D(_1PO&@gLH{k&2)L4*ibJK83W+{I7@U_aKC9B7Pv`v$IE#r zvnO4)^M^zF9EL=wb-_!HV0VW%qr2TH@0M!QUK~@}K+| zh(ikfX-D0QcZIJ}-vej>K7UOsLmULY)SL*5yIxo&FLPs}j}YwdXflFRS^n zJEO2Uc+L}IE2WecohVE(WhKpf*!St~26-#d8c^+_7kkICH#~uNcYAJ(8Tk$4cJhO! z)%_Fl|7Z{R8Unx#{QvyI(tKY3(`+t0@c;LZ|Ces*`fMAD;{fkI1HM=pN(yW>VpR!8 zZEsdAl(G9Ip73;eE65mz(F*Mc%`yih_Gc%xHkO$yE90jfF4y7~p)419vAg?oOL|LE z50x_eSS2%%m4Ek6qKj)jOIf5|{LYqvN;`@Mx_!{K%R}z+o%{9+Z8!qKx%;FW3Mfzn$L&QBCe7L z;Fv9s$xm+8>GfS^R2g&J2pOo9<8W^pi_}yrrKO6{#iqnu=AV%>I*x{d;$2J^XxTGh zB2dDqPFGAmTRYg-bPI290*Z}Sp$*Tw)0L7@l3US@L**MBMRoEL`?_NC07pSTXcI+* zpT?*pwZxXIcC>Vg$zniqMz2H;-k}NXqbt@b;atx{|ILqvrRC+r&E=2LlHOUD!Okq7 z?&rvAn8AhgSRxNOJQ%d2pW~mQ@$~KFlsP9@4(a)2jG9gq!v)o7RW4q=VfI8l{9dwx zXm+p==rkz7A2HPnl9TB#fJWF(*(y;aJ}FMHX>voV{)^G63UGQ{k%7Y%YW5Hl&Q&I{ zIOZn$@ImzYqwo|KFX)mjneS(y_ErR!GtJ&G2r@UvqmH>h?7>1=A!%GuKGDmRy9X_kPUQy$xWicv#RidD`+D;FXUh&Het# ztrcg1kaD%rnP*{B{!f7|bf26DDTf)$0aSBDYU~gn{A~UJ@}J`F{&L6iUrGM2g~hq~ zhx}jPX#HiB05Gd}wElDR`TQSCi?a{@U*AUlhm#;@FD9|&|8MWgn%g##@VkD+nAV1t z6Nn-uSuxjgC6&Y}SMA0rS1NH;?3E!BlCb6#fVAv&>A&xE&w)8{@Q`R{@FEeIqo?QU z>FNIZ&*<5c!Bw0+eM5f#{^bsLf?z%n(KF2hB2Q-M64>wEC|=*6?$MuAVxDL4gQn?6 zefnaz{hIC&s;2-X?b4hVY1lSycm9JYdG>*u%}nq|}f z(lfhMpp+#kWY@{G98~YquYde_qdR+=DnT5+rKX!qIU$VJC0z3mtp_pYicn%|sDD~E zevZ-o5B&bF22p+!{viZ*gc1tKI|$l?P(rA|DoCqCLD5I~0%EhYK$`>o!GA7CWO_NF zXSqZnoa9tc?ZN$Co%srl+*E>6GundW7+Urbog+v zV(^2b>Xxo+dI0J|!%3N(N^YqtW&s3VGTsiNS(a4rxLG@#%wyHuN~0GOU)Qj^#EPi} zhL%u56-~H|Xl0QARA}t~w9hZn54Z3C*Xtcv_Fui@u>WtR{TB?8)|$nDCOb&&)s2x_ zVwB-7;>Ktz$_7r<55vWr6YnRWx$~TZ67E1**JN1QV>nHQ!L{80Kq*USG+2;Qhvg1P zW?$PtqKhUqmJV2T zxNxQW1F)bu6OLTa+&!B*B2hPt!TaRNPcNSB@Da>F0>r&G3|~YD5TAK}ig7N#Lk}|z zJd_nS;ceOf#Wnt|+kZc@?0=5C0sm_o_y6-zJb4GJ3zfYK-xaxfSnGv-KPQYLA}3~3 zxr-(N==+GSBT@1p&F3Yx32%O{+ooPp+XeEk;`kT)J^VgxwFsO?|AwMAvCVGT{FtVYWNQ*ko-#2W;cg5UD z`a{5L?FXhw&v{@D&Y?|;$g2E@wq+aA|CHH(KRP)M`k(EV|9tqbObJ^K_S!80c$EqY zhP>Ky1G4ti+0WuLsdklhEzOHluE*xmP#TvPHiou1zianeljxetJ_u;X%;b!V9G`BB z7bVyMP>r4h{$`mfCoV{^WPRc&kE9q|N|3DkC86mltgG4dl5RbD%?21sDCH}cdL#I; z?v|)!6BOIDj?p|BG!Rr3fv~&(ZHr?-mL@>#KxYC#o-8eaCjfgrba}FFKJAtNh#oY+Xmkk6Fe8Tp@zY~SF&H#O4&JvGzPHr(i4>`TvzWf|7nO^kmVnY5Hz zz4Pg&2|z~tE&=yw=KjGEE^q`W?$C}drIQK(v%6&0J31*}z=*w%-%Q&`Z>Y($244cO`OEjeJ^%fuv!7l;WZS~rHyd=MEgeW?bnhb35AYsrcz00m2T}Hr@ZByXYO<{~aA1TlnAIgK+=1h4+8VqZpiGFEf-W$uP}f z|Ff>@Fs1+eZWn~^z7s5KpS)avT}H3Xn@1wuu}jF+ z<2SPlL`YG%)!A0WhB-5%slwQFV-{0}6-rB&KPoz>X=@!#wFI~-Ybl#5(Fbkr6{3}( zxuI(HYo3ml7`AybG60O6d$?d%R1J1;K-$GdtVhl|d-1Oyzy5F|cVizlX)?T-hF219fqtFU!%m0O*Hf z{}>v!wcOd#3*9QST(!|J=&sIu@z#z)*GPKDk`P*^uD5#ncI4uf_k!39Gvu$A@maN^RM5E`r0DiY!S{=3FyfKYlBMPpq<&oJ5Y4#lu>#N zP39fR&;{Hq(*f~p*nCGyy^lc!O5TE;rj2A4?)5*fe*F22{-86H&Vf@pZo6+GwlLRdw03zJEqFOeq)9A) zjdwNkgiiD6^@LmZfiqfm;r8D{q(+{OhiPx^-ft}(sJ#Ucb4I81#ee-vF(k8OzQ`tY zKvEKP(S_5(DUleDsH{?F1BaLtz94)yAVxfnbq@b1O27%HH1Be5lxKPwpg9q3T0tOJ zt#}Aj`K1!burCuyp+ej`h)Vui#3P-gZj0PIrGI<+^6`mxn;@u9SaHR|5)bCIus;3G zEI3)OVmr)g8AY1)s3=zuvU}ecL?Xc{M;3_WGN^tMO_Ytt7SiU3G_B$Uq7Vc!t;L4u z5=V_^;WoQIEsNfr#^aS30zzB_EoT^D{Pxc@WrM~+K{{d$TZKUyN=eT4!t+chSruDnF z{oMxwbPS8T-w_~X?M|DtqxPQYcjcT;i;|;(HU(NG?3-9LcG!X;urY*hfX$ixr;JP? zyM2%qQ%ay5dw|NA31&k2f)XNr76Urv|H_r2h#dicJAF}5AO3|R`Zvmi*rS}kE&m5@3oc?!t>8ekkZPvs#BB-Rxm?|1hf zn;1FuC{TdG9=q}2Ml`EsRPLgIkPT45n1P{YK|;DnGy3*=nhlvlY#p{lv+m=g@8*)@Cy%M3c#Ihb`Bbtlxe##g@ zD-&aM>=iwqk5Kqc7#boT(kD|Yp2ZMQ^^yv-*G#&XvklZ?tW~Q{ylN()=|4n5WT&!{ zflqeZ*t*wQd#xM-mkU@YRWN`oh63VI$(Y~YZ>_QtaXq48XaXbn_1hw2n>kCl>+f7l zr?*3c2C*5BMi87Gm8*GjiF*v>5!v&3Mu$}i=P22o^EkUL((g|G0}s$-O#)!m{r^$d zlK+mo;r{m4^@1IL0Mm$9N0n09QT(xSNV_r!zstp95@1FJg!A0Hf< z_y32F!utP3t^Zt62xH4G<^lI1Miu>Dp=%WIl~36XmKoeHCzqq?c|0O*Av38*sG>s8 zg5+QO>!QXw;*@iW7l~ zP-ujVvNT%U==bHM$dSbrO>9^eKQ=+?d^#IX^EvByxYMFXvq3UUWDvJzl68(z>2V(^Z~5aOqQvE}Q|V?6r` z1n7=g5PbEV?Z{a=q}ww&|A>e)+IlRgEsn_c2Yw@?Le!|V;YbiTHBWRZPI+#twd}5< zc4IBg_7bo<8qK#1uETJ3oKAxhO5cOJqmiwFXnTAzYNPMyqq|`c+2Vinc7b<;hDxk&WeVnCWd!|8%i(>HxkjJQ?D*@0_)p=ef;+v-Z zV}oJI>%lKY{$oq-8YRH0_)o`OEB@=rQIP+>#QUEtfgMs;lfe}>9I?|m26zDc*`>5( z_6%ktc^NI3p z{d5c_H1n|}Uri=tb(Bf6XD?np|M~eZrwlaSC5bd4U6isGftC~h`H8fg@U;rHVu|2E zMTn~tOCuo|{mqPdhHIIhU&Q{uegue0`;SBO{_ptcxEJ>Sp#QlA{ZBpBkK@qdJ9j)* zp?oTivA%=avd1Kz%iNRwDxW1zn3XiUwrv-cmTXl;X6Z3|1#%sw?)_Z=F6{Mx{SZJE z>;LhwW&d~l=qRlJVf`2De?DKFpRrZ>3|1A*5fMI~R)nr~+nPX5W^N)5Z}^6M^_3bc z0N*)xpUEh1nD1c` zVwaX>A`0r{L4&+IWUCFSjFzLq=OZ20(zi#PM~O;{b4T^%5idhD3TN;kV4= z&|tJ!NuVjBB_tlDaW2A4MN$4PokjfJ`dTIAxbbwlqrf6CcYx`%EcfGbo){$CEb{Y+ z@~7CqKkM@!^xYuYQ2ftQ{MQ5P{MS3|hV$R{o&UBW{-%l=hc zg#qHsxdD`kyowIfs(@B+SKwLYJvGoGSPiTV>IDrtzT^yu4lJ8>+h;G+oLX4QrFZFQ zM1|{7bhQ}A6JH!zCyJY$x7xCral^=1%clg`VO3b4G4v3N@aj|?nI-gWH{82(R#oB6 zZapvK*_N>q{`8%>ww;yv4A4oodQ3Xrb>`z)M+M~Smvq5vgbBQ>jwrOOgVAD`*q*dt zw2Ym^x~#S2otW4J?Iy^L(EjAS0&OBes9a~xH2M=73Bk!u<=4x zaHG%f7*TJ&dh~MEs4WRzUTeg~laJ7#%XLOJAEx;LJctzcXs|i8JxD6d#%p;HwW>$+ zQrn0%eAjwp32LSAgeN@V2~T*!6Q1ydCp_T^Pk6!;p74YxJmCpXc)}B&@PsEk;R#Q8 V!V{kGglEIg{{j9RBvJs-0su=|IMe_D diff --git a/pre_commit/resources/ruby-build.tar.gz b/pre_commit/resources/ruby-build.tar.gz index 2d8413643b29c326e7435aebdce8036ad0368f92..afec5dbe5eab69fc879523b3a4ad4468f0a62c6a 100644 GIT binary patch delta 59726 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

@>1otlx;d+ztK6T?gd;&@G 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 fGPtF8mMi~HvHy#|Yqf@6c?Z=p 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 delta 58918 zcmV)WK(4>hm;|bm1h5eyf8|Ct|5L4ApWpxZS@l1u&?Rn#>3FQ~*tgs;)MK({?R@5! z$V6miCvZkwsGhLVqnh=xM=0RcIv~URC8N4uUx9U2)$572e*5mm6GJ$B>m6(cs%ZYr;-*?ZCf4VpN$B=SgscAH3sx4W#YE8xnj!$RG*Lb8-uB*Gg;l9oJ&Bu8MRy`<`+N&SOyH z-0TdNer8!WG%gemqukDo;?L8?7%8m<-oN*=F&Z+Hs(It#X_9v=~ChrVG&AQFK zC6=}L^6l=X*xl16Ug`L#0I4FHa;P4%6Z2%zJ~6*B^+*orfB6paj~h$|-q?Ut+v$aa zOM!n{m=NlS_=c%3TDXujxg0m{2xn(X>-VmG^n(tsee!(rhZt+dO#wr$xmZekLt_;y z?U7FnpOW`fLwxLMUAz-YIQhtU)64phpb0E(Y94wq?MQsrc;bWl0a$4)o-+)`bo+@U zP~muc7Mpx^f3O|qfcm~+{R?Zv4)Ut|%45is85fU#gBnn=WVH&`X|Yp0|AxiIPUks( z<()@8;2EkZt^=b|Ef7F8ei9r%i~G-F`0R^r%*C>4aCA((t^64+xe>)3EtE6qLauc$ zb~}QLvc%ffFi$UF#o-7>_6|@wmR??Rh050A>ke|*fBcpNqAtrq)^HSII`&;ysTDT; z{3p(L~CpobhTm@S~Bl%2TV|DJZC@AGo12=tvop+9^`>lOo#NC|rnE*Q81p224v(T#aam51woZoJfcOe*P|TYN>y~U8gPbhqqPy&Edq7uA(IqG7>&D~a zbhIuS(VbyjR~)l+qeddVasRRd*Z^u~2OW_&0Km@PD=KJagtHocrNYbux^5%JLwD!= ze*os^(hv_!Xfkj1wF5BHd*uzUD_YMv_d%HWk4>k2X-OMeM4Rxkk z`tTv8Sn)_>%VWQZ;4>hBB7QBx2$1@|0o2ep>`bkrTliQg-IZqPlGuOBP=S7k?N#C*+Z@-#R zS&fOD)X6XDqE^bh;BOL|z<;oJTFy@MlQfZ1m5G<}W2*1pO%^|iQ4e=if-BUD(TjBFKT ztjjb7k@ht^4tw^ zykY(8lpQ2p_TuUpe z0;p;L4mVSh{6kZ{e^$yXIY^`ts>yY}diB0?$S6d?=Uhp>osOZK4Ajl0DxngL^?ZD> z#&QP*=Hc!1)0K4mmTI%amIsk)d1V!b#+Kh~)mA8@TD{7aF-MgJ3@z1yIJ3otV?u(O zrYqMK3diIGqPPrg5KiwLY`yUXUU`Tstg@}=ta2Vj=Mq9@f9(}!i7D5*$E;Df%&Iq$ z%_YHnQ6)j;GwA}F>X?120g8VdvJ)Su#pK2SS0ve%G1R@tvv6 zsOkRGtd|}Mn?t~dS)?enH>0eLnAlpkFi7MAeo$d^hSW`>YI!m7kPjxY4uqRuU;svK zt*L<76Uyv;a<&TJ5QY<;fbm4+9X~nKQ`D(se=?{;e@&ZM`wpsd9bQ$;fEc7@`J)?a zG#S9RL1dxbPJv1c56j84=y%+g4CsZ+m$V9Sr5jah6QV^KF`$2mv2o0VXN6zr&*ZC* z=l3KCbh^#LJjB<)uL2H01|CalD6qWwuxSgBL1^^V%F4Q4({=c_gh=>A;na%}@zkAv z#M?Vvf9O`FXuoeprfUn}VL~i)5ygjjjio`rH5ZNGS8BwHhj?8$R8=|J?}KBiiNRI6 zsG@rB6>~?B0hZ$a*0CiVf%t{3rw%@yNJX$iuDL;qa>-{wohQ;m z?tOO}RW#)`?ST*}@y$nL!ZY`MIfDx1ikDkX?)z|9X7}>xYiER4d#;JHDq-h07?T?l zf6Zz6O-|0J7_eXgg{cIunDzSxDW5%qLEaSrc0PZ}bS>V>@5T4U-{pRfAvYL;NgQVUJmv|dyG&kM*^lZ(ns&fyCxY@A`F#FQIZA?GQ zZ3~T$3~S28FD_tpD=fvnri`GOf7n^h#m)*%Dkl@`JC<&oP8kqJ601fX@e$lp4p&3G zKZ&xlW?%7~ltsih@>AwcE>z_l)7O}x&!zBrN;rNLT;^^9;^MiJF$2Q{zk3QICQg97 z$>lZ<*Y1;D%!f34C^@awSEj}cyXAo_r|%v5)op=8=tL5s<1=gw*|cd%*`P1i-VNla;e2`_BX1J@U^u>Df3^spO-*6C0`VCGAZlbM9b3SKh%LMcYZF!9%nSC8uc{AA+`!rEQ#2 z$}Tj)I3!Usm%!oO3zYe{cUnM~_&T!-=c% zl0Ir}Qk&L~-!K;jus9@G%9B;xJq~swze9KAo6`}CNukB(iOG`+1>l@JZHa5ED>$=C z!yt53y0NB%E{qO8oRGCpq;FL?@iFa#1V)(wW@>V9*H3QtnP^Yd;d> zMZ=wGl}RR3;gOv(f7W*jQxf0==B$t_t+R1(u<@&@g|v(uOuQ&tJ^tY|39>0`o%SXH z#m3xzMOB37nu24*DKrJxGR1A*QXLHKIDum36l!(QmC*^Jhdg)bm`IKZKW`lDZtuQY zW2s4JbT>;pX5kob0rBx<1khr@Z~DbE$=8%^L~Jb;bZ^1-e;6+!0p@v5nOnRd#G5wU z37SXm@aP9%#wesKf><1QlM!Cc&ND2;g{i=k%8b!!y?@kE4+3YzFC9t^JUc?Vic1Y{ z=6F_dD%8*)H9ASr9eVum*yI5XdF|Ycy>N9C8dQ`;^$_a!vW?E;8nJ$7i_58)#uZaD zK@Y`d;;$QTe|9pL!L72K8{$?O$g#rINP!TP`Zk+FpFOi=MipLNIx1Bkx-U+)d6&GN zuBin><=52;+|#d|@%uXO$fdZi4bE&H(-JQ!m`}P%9S3sSQLpc*c^@2^Lb)LDD=BA; zgWl!&fMpqq?nCU!YLw{Nxrq7!hCg-0@sxm{tp{6ae-s363>0>G4v&OeizDi?A|Kwl zj`uQ3{`RXh@H1#bWz14T6{$S_}PU&YDd3_NUjTgE>?>;%dImdC-s52@eS`m$w$a{#a#;3?(bE_ z6D+V7Pz1CNpKV5cPn6nua83w3Q9Y&z zfw9-e@Bz=v))S^jk|umHN7-P)r8h%x-YFwRb-F0COIjY&PK(N@?gjR9G`a)}K-@ad zf3cR|cGltf;X_gro%n*MO0z7eJC^s=SiGpj(*7l$C&FwTIyWvtLzL#Ah{cL_p-ErF z`V@*u_Cm|TiA~ow@9C1M;bqwTLksM_dkpH(ei`t_S3w`$mhyZqku%TCf3bcAx^^@w z@`q3H45~TfEoD5aGnx>+f=tALjZ@Ane}z@rFUw&{n4%FHt3%e2N+xqJW@S%cAJf$1 zAz#Zvys$)Au!UQOIbi{*=x?#Fcnd8oJYU!RVQCog_;KdR4|E1ubO~rh-C;wj-8;m# zr?x0=dCO~6yvp5hd}Jp$V|hoX=^M^IOgVruLQ>(_EgqUo(}i?ZC`Bf@3semA!VSP>bUq~;>HE)4~W3BX#DukLoL8aa~r^U3A5r- z`2l!?m{@U%mq(pqH0GB(;5T_RG#;ZvTBQHrC&-o%tR-}*EI|iLIeNi38anT1&usq0 zK5@RNFF8}`^`=)HXXIUk7@P@YB!lH<9D9@pnO6h|QT(o6HO18x;b8I(f8HGH=b!uh z{PVkJy#ob-b)we5>-MlbKE(WR$&*Ui)PuzNn?b||;rYe5cf+SkyGl3f=S_mLr)K?k zjYM;2efFG-x%^$nI`5(%`Rwa=^0(A5s8FZpfa-Zc2d#O&8PJzOu3g8pOBfrR)$p?M zMc{(j80*Ik)2+yLnF%1We;fi17@V>beispK3X*J?NEQG+KtzNjp4o;~Te%nvAe ztXvYo;UX;D^4Zc!X^EpjCOZ)IomCky6@wKPT<4ORHjCE^&({`CzDfgef=!$hss5TN zJ2X@{jd*~KWa3n&DUsiMe?MmA&OG*)og7pKMT^BDuySQ9VFokce}v|}0Cdhrj?=r6 zXHw_{dWXwHx&SH{xDM%*X)r`PWdY;p z@9@|-T$Ja9;9VfT`FKY$eRG{LeIr(Yss^^_VU{!2NpM6$!dyjCd!W z#}lG!U`(eo6wpmAkRV6V-8hm?Ds4%|5v>AO`3mAeZbMIC0#nfCp5sj!ho}dy+f(jTNQ^p(vqAKPI6;kU8*p1qD{ovK}QNo}#pTEYE;1e3jHr6!;`7!xdZlZQ-k> zjGzNyKHa2JN-}R$YAl7zVl+l#kpr!|`aqL#hQuhkXPMKhMiz#a+3laH)6T*jn5qE1 znkjh#7B~6{(RTtf@L%6uv2vlb#1Es4{KymE!n~&C#dzY5iq7vKFH)e37n#$rSWG6( zK_@c)W>%6U=%2Q>pCul5_-#*=wgXpdi7JVgOYGZkzcm;2cFp8CH+TiOgeRX z^7T?Guai+X6My7C1yfIq60a|3K+4M!Bxn}BZ`zzkwbbNj@ z_C3v@0V7x0%ruA>Y9tZ5dLE)SKP4iP;1G4LvH!po1&J?OyHnV+3cPrXS0s#h8I@k# ziPvN!c;YE%1^7!nNOgf)V?;LUik>?VWd-Alt+T7%Gr={=oqDjvm zEREC6VJth{V-WH*k|$>X-N~7_P>mk(TPjA3C;BR|{d9y7^p$Qh6(^Ls-%*R+pHhpn zL*Hs2ZGUX<9A>jHtx=B9K#R5z&K!P;U)1e}Ug!{1a!y8kPJY45;)et8^oapU#aB{ULDI7of|DtOYUK+4<=W zb8p500$E76ndt!UChmhui^rhB)ab_o(4<>!;D6ERGG@4QTVSuFYrL9pH4CsxM-PC} zO#xBQr(5$JAe=(0P_c$~xkkzyOtqkw9>4PIzQGsRQ6vrp@D`^!!n;ohe=i(ylYm^l zY`dw|Ow#seFf%i4xoCB?$M9yeqt|V=f3Wvrr~Ss%(|%Ii9pw|5b>3A+MR_6kYq1Nz z6o1pwO4=l}8w0hP*}5ooM0nL2)88sktIQ-YB$dIG{!lHnW~LL(f;5{LxDyTD$3ZS! z@`UYdz;bS)z6=I~V0^8X5mavj2`=%yUa z0-Zg|aSHby#Cdt8JEA0EV}fMFZ(wCNMN(wn4n|oVMNu!#wu+*KxQxUAy3;VHBAY5n zu~pgj6lY73Rc0GNW|Yf05RimTaG9e!B=Q0+MEN%xn|p`9bhg_2JA1!k{?^XX#=)!h z(K;qXlQB9Lf7SNNv_6v@aKRRMTnH(fsi%74pOk>bZ@0>(z*pS2hP`I@pi(W8EarC{ zIhX3r=WJ?PU60TQGBtF%x}0u8*B{3`Z84t^dJ8jxc4Y26Oy7;pN0nTQPI+H5<4TR2 zGRYQ^26bbKCIhpVs98BpFhdPkeB@kou9C~FJ&RM5f2$>a$ybVO^L_%|)-bhgDz+H(4%NMzj8zI{mSlELM;LQoV`k5gwu&vj$4wnV3l`sY zurM?_J+OS*y09yBs#zWORT&F;ugA6esn)SJDZD>Tf5xZT0j!wm6x}?NWl}vaL-#|2 zqtU3|^~Pq2T6v?3h`f`6J1GGvldL-#0X>t(J0VC}U1m=wMc1%iHO2^}33G8C(VS2qoSDcei zPq66X0U_s89$$CLtt#$FQl|f!;104?x>rL2mChJ4i%U)oT=jf!_Pk6avf3%2gKId7 zm+KD0x(a`omi$#4Mo_HcYPEJ{u(H1GqzKqL} z`5=q%|H4J~@a1DBMh{>zlMc*OY?U@@+qMocegSXr7>Su9r^W;v+WG5bn`|R(~PTVa7{vx&p=%Ep=|NQA%lV9n1~p+3sv>+*eoNMuYoE!d)^-j zJ&Cfd{8bq!=mI*x`a<9`(kbe&*wg_C(c9}zp~VXoEMV?ZGuLVP!d z2Xv8>sXkl|NK>zx8ZM;H08Twj&PS6IKP4928mI<^3%AzZ<2U~Xv>H4u+PlHqE0az? zB!82gS(hWXcES zD2CS`a-!yZjUs7jlZ0IcH{OL4(m9dB5GEe*n_uXVGrvAmJCPdnDTF9B^+jwKYtlh) zdG;4c$ig>x<22qIlNUf+f4kCtIxd~+5-x_vxAO7^XNX6*#$XG5$6n*Q3_t?iez;h@ z{D8r{?!xWmo#kW3hr0ql3bw4&Qd8xvhss!(cq5cuO^P4|@%Q-6KBxCGONcCI-e4M| zJP2g>K`$2ov=mkE+-#(>vID+(A#UvBiI3LVv+H9y=}J>1{(%jge-=i;?|6NXAF&Vc zP~NcO2Irxc?v0CW{(2?b9q`B*`Oc51S69Qfi&ozBle6PC&~CYdM0Qh#?yC( z?3PcvLe>Jcyez7$9K*{~K!x9MKht21Gw@a97X zIN-2&DI=KQcj{oW$bBMlVTq;FOR9?mZ!k+aCuse?iIsFlTj1aW5kLt%NGgPQj1C=m z0i_k$+2Tj6DFI)G4fXtP&pD^d2-6XRc+CtZokjKv5{WH}RTf1Z>d%}i|V6M0WS*0%;e!4bw0`oQRXb4PKe8=!Aedn~nc#eefKMZAZvP+Af;9p4YuTbK41 z_N@&28U3gOnW`uLM8!nfg-W5eWF$R_8tVG0{FX((NNiuXDd&Q$zi6idDp!)7YjKlq z8v8S_f2YnvGvY&{S{9b{5r2U-ui9@qulL@NS+M`})?Kl1&hA%0D?Q!0UsULgAP|INtf0dMVF1C5(<{xb7H_Nh^Q(R(tRb&ZT z6+3|sSlMFoMrFmb!c_gtZEk!Eed;<%o^|aijJdB8^PGa{K7OxI9r&K97gU>L zfAkt3&h_jgd2O^-q^awHJRz`R{y=KH|dbFly@GVbhO*R)d5&^lx)E~f9-DLoz6I!`blh+nq9m<%!a@S_guOKu{qa^ zr{AOkV(>y=U=|$}MD+m_yzmcg43sD;eLcA<9K1srg_`KW<|@zE8(go#B43dS+KzUX zKs3|9`(U(<9ZWl;`uY?TaFRJ5u!AB_W*eKXRD7PHg`_?r$5Q;E@Vxlp!&2&ve>`}A zW}!9mFf{!1`Qj4)EhZ)X5IR^~%C3XR^wHsSt*^+e6`D~)IVG_k&Lp|zWO@(aMbRaC zM12r`cq1r=79+#K)M0q7jzipJfsNdER;AEtVYbOh>E~|%7CoVV z0j&NgJh2%-mH^>gU$UiJG2r7x`;@IOmSK_FyIX{<%a;Kfd!hhLHxH(ge-+>@*iP(j ziEh-^7f)j}U%-U%VRFzH%N$%|GC(B+c;t({!?yU9$;&RDs%>uExL}JLJgzRE@Yk0Y^IxzOt2o%(J4$o>bnkaXvKch-wqj%g_lAJ)QlE~6 zPcEI7g?zD7>_})uBEgC{e+YhoQD`Pur9)F_J^~$#R9Fg0BH?7<$HX;ZA!}xZNOGE6 zuh^p=v8<_8%VEL!)i0?!p0JSJW)NUq1y=G3S5yHSb)z_tbp#4!%MPh5sZO$_LZocj zDwPd~S5+|%M6qn4x-3*r3e~3|lqNyW0%V3y8XQl^L7Vjp8wao6e`4q?Uunu|TIMpJ zFPY8LjcTGqs@_RWI>eKNGiJ)_mX_Y8$Zhx)KM{9NrN1OWWi$m8Pq%^R^D>=I<&4W2 z^&=X&C%nf5BVfVMlygY}fzMoVF#BrGg0n#Lf)g6MmKZZ!80 zR3N)+98D+%Z@S6+>*vw>`!1*Kx8GXry_d%S!qcHIHV$9ke;NNvkoEt<=c%)vnYwa@ zrg4c+$vOgx^MZ1Xws!~7z|tm3UO^#IO860Be(xO<-+H5|u?>0XH49r3c*l$Ci+n%8 zuxv;G*_C6Eo0Il-eib9-4B$CDr~QbEz!)ztNEO`Y7aNTZYYm3x&9}^cnpvFWPiQdeaqWGJ~PH%WWk% zC!z?|!KVUy3)-h@YUEH#4?6o71H9fvDAKJie~67EYDyfM5*kq$Cnd|Jmzj zZ=M~RE2Kc}>?NT}87-@@c#HM#3ccvuG-QOrdQRRNkt}2LXXo%rbOA0VEtBv}6awyvlLk#K zf5WTm=#n6X5#n+P_U-20n>X7>*1^W^tM+$LSZ+4$stthK!6*_Rlf69}Cv%e-wKn&LrRRq6-Vp*_}w!yL7x^{p)lIJ{{}* z=~C*>+;lF;1ojdIZMjr^-{aTPC|!Fk}P@}E*DQP}NbUPI7r$e70aA>fe(<;KBiePi>@feLFIMwp{F z#3L)6L6RUK9al>o&`jt(@(>@(0>q!%HrCP(Qdwa-$+!#{e9ZV8JzN7Hi;k0+;&Y-o z`X?bMW?e);JLp0>{>?l+`FeqWe=P9}_jqK877!u=_w_+RXR~oi#PXrP6c-A!xh~I| zDw>BCwP~nf&Mnkkc)lQZ^*Em5vu6v>@6-v?6m8GA30xx2hVYfj;vA2rj)n5VZ>Uf> zIM+)tNgZOxYt6#lu)AW?ttgg5h8Zf+VHK4MQeejw3rI#QdAspu<6mH5e;-zWNp1ev zKKfq2D@#T{=aBmsu}pkIe}7Mdrl_zQB(V;Css}lNu<16S>p9&7;Qg<~hs$PnVG)Icmh+BGnk?YkE@htFwf?0$f z@jFwz7U~96R4ECD7JUKbo~PfYcOR()#b*5X^Zy8T zA~tkBo&H~LfU%d+{~Pu4T>t-4^nZa7K@n`h|6+{MJDe=BE#0GY2k0E5|bM|k)OlQQxelyx`0h^}LCvX=r|MTcvqfh~z& z%-XRHL%Y%a4;i{HZgl69Vq~vy*BJPVa@0XOqFdoaC)KD0w*0OlK zzvYZ6Kz>CJ1d$b{LqRt1)FCNC6jiTnIzywN&oU=wON+O%e}TKDocIpF7B1e?Xk!|v zV`%v@XkC}YZq*V1D05sxSL^20;;mL51R_O2N0XSp<|EBL3Se1|>*7uBCE=>nH2ps& zVK5e%&{b=9g#uP24IMMGlR_|aVs`NarGvNk&|wO>#yostDbsS^{AgFMSZ!v;U;VZ` zeX?MErSSDvejq{w06uyJ;0uEn~l=N6W+%B$P3tR>r2nsv-sKI+4XX1wY*whdG@u7 zDdtC*i8u~sEX;4|l`-z{%uWKQ*ith2R4i$4VD@R>f6b6ok)(EqU(o7HmTCx31Y$BD zEROstO`iyzR{hRQ+O;e?=a6k)jrtktWOT*LT0C*_(DKT&l7s&xFWkt#S&=c>I`{DK z;weD!msX|&BS-#obK(>F|H|cQ`Co06=JNmZ%YSZJe*1EJr~MuKR@sx^vEy$y_jZpc zlkczlf9>y1NszuBQbuOx@C|a2v0|g|ya(ZVSOJ+hx(YE03=3~j@DIt=jh_z@MSX5c z#>@@qk~CnmSE0iItTmGE!m8ca+-x5nc7AOC+S%UHUmUhK586lCd+KLTbLF!m$j zQFy?4dU(G)LX2770N{d>=+0z(fr))6qB5Pte<(a35a&kL#&1&SjH3=dMvn<5+!W?@;~?9a}__q<6C zQKr3M;4zE8p)%p1)Awulb_(ygiL8%ao(kob9r}to{QzdsH&gZ=GAisK=PCN2w8tph zf0Li@ET{k8a=hN!BK%_}iG$7JqC4>}gK=?@pCqI#%G|k$0iGO60o~4K=V<#)dwrA1 zI2UJ?J@eVK3-;_+_Uwo~dvEgVQ+nd&Ro*staO!|^=cb{JbAA8qkpZx+o5P9Q3q8sz zW*Qn$Xq;;o&1kbhNwN6MCq7RdhY(z;fAGi)JTO25-6t}%OUy$dt`r<1Ip;d2OzP>0 zF%o|;vyN0}C^D?qfTcR>gK58DV6q~NmPEbS0vO>Lt)F@*?kBU}Y}MeMjtEml zj$nGVGK3aXh&yhizRiEk12{gq{f}12r``Xp)~5FVD)ab{&nN$-7(6`MIC^`ye_jH~ z0RnXKc5{2}Yc!LFcjQ#Wh)hw$T>M_fbeM}r2OB?aAEFq-QG{#2i zCS#$PyTz#5;Jb$%+C4P2lPu!({@b0M&O!S>-?k5r)+`ZRN!vp7{l1=*GdQ;=9%e^J zsrd;1+j5#|`sZt4dHCj&(7#=2e`Mo7>W#|W|M%JGUorsth}bY32I%S+1ddsKFq7+) z=V!u=hQ$&S9td{O-f3?fw($U7d-G`T;8!#4$4KQR7shHwC9ULI7uUt6c36}ljYhOg zkF?I63(33W>VUrUdo=3w!vXv&yA{dElj5LqdFVLv*-~K%T>W5q<=XD{tR^+ul1g zGFL&WjBS=(fdAoMh#bWA^>sm}>%;-@@Z4g$Jk8zt`vp6wI4#@t>~72NdO^u{y5)MQ zT<M<3pi*+HCAaA|Y`a@FnU<=QSr#Bse#+eG0c2K_ z_BLTP?iRpYqS=E-dV(sJ%HhORI>U4>Jp(6euK7K{|9}5v{J+$givO)Qs`WYlpY#9O z{QvhXZ_uRxe+gsCih^^n?^Eo2%2?+25+hSoH;ier=2Nlq)D@AN}Vc3L<-@lOh;U$01g6Kcy2M4}>@>m${w_;ze#%3eR{(g}%m%tiXnTF_Zr z0<0K*7>~clGZj2Fs;Ig`y~;d{=;m8bbiN1IBC`VO?Lv+=lb}}!0b`S?S0WHHV;vJI z9JSx26^mVeEh&c!W@sH&`AcCYhaU!E^n8O8#rPGXHM> z4^UEC{+BTVY%c%j`u}YGUr*(ecvv9<+*FgBSQ>vZQP!4VY)atFn7lkALMzIHU$M!% ze5-}xbWgPGC>X7~6AmWtR;Zf3G?*9;URX}w$BRaCA>X14KvyWA)%4{;IZc9;jpBQo ze7<6&ukCp|5LqPf^6z0Va>f*UK=(eZr3Pafsbe8B4*1{Pne-U`Z=H`E2h^{>jsMrm z8UBB7*X?=y&z%21j{kox(DN_I0oj5VSm<(T>JlK&hcsIlh?a_4i#!L{zmZJHo6rYj zLq}Bk@?`|SReCNYa`->d*x%5{6VCtJjoSSD|7Tf$?ZM|;|9ZJrnXmunUVppLEYz%_ zZCC#K`q!(~+4+B_;=dY|dHlyGT7ThQJ@3d&3~0Mln-Wx{en>wXc^- z-In8*8ue<^tHEN|>!47S>a9|#<<-1ewNkQ6&9dz~Wyf#Xb>A<0PP5bux_-$vlY0}A zyOq>VfBq28gMMt`wL1+nIQbRQSEkvZnfkzO08eU-9 zUv46F8}|>(?4LrQ|TY7D*AUT zw$t?8k^_vO()7we|BmgofXbaxBXDaqr_!ob8(rT43!&tds-9#X8r17v ztyb>_wWe*Cs@^Ya#}&FQ4gy1mJNhgnp6L$rvLg!^8emT|CKEL*I}mT z^#A41fBi|cUsrTr>UwpM=OBOl{bm4aJZk!7r&f2$j%R!2O0C?iIF)*-;ka(IQLmJs zLc_M*O1BwQe7`ZL`_D%IXug&HX8O<5|L5@^UlRQj7Cem!P*ueVnoXza)GNLdw90m? z>r|Ru$Ekaj5*P)b6F43Se9x|R>wdFaZ&sULwN`dpUaMTPn-#l0_y2!=4*LHb_WxY} z|I+B+emeap_J6bH)mzni1BkiOw3|+?)U3E(*RR)|pweu0JK5at6mL+d#!Ajx{XFH zsC7M%|CI(P{7uI$xvhV?UvGMTHwfHH-S+C;dKDChIsJcf`Y%^LhyFkJ|9@HZ4_NS2 z`iH8D{_CYm14Mqw?s}E3-w3+4S8cd%)hSo~Mx)j8%Jra(8w5?i-tv5STylKR1>>Mw zv#WDYz~`X%g|NEuUf8*)&-%#}Lcy`SJ z`e#o{_`}t2IFZa51d6=>$Qy)@?aWzfx{B%T>2j z1=(M6x@D(Qa@ztU<_`lM>9T(`ST zAfiUK+-#K_4G$FmdIbyuyHRy~r`4^LN`4tkgpyM&d!B#qdGqr>pM(BepPv3}^ZoxX zjs9Ctr~j6s|E^na0dc!cr{o8d zFd#6nD-Aq@FsJ`dP5;f$aQ?SC*Z;pT`fpaAO#jW~{I6GO`F9?GQ zQ}L_apyYow+*Y^IsykIT@LSzhxf}SkQpxdaP1mheeA}7R|7W28&!GR;=J7vY8vQ?A z|8F+6_@7GMwVPGD(k)jTwR)@Bb;^yJTdCE3r`xT2fdeW4=mB_8xZ0|Bt4V8 zE~pK255Q-j|JLWA|9Sq8FO2?MPpAJ@LjSF1tK@&x0=L;}b?ug4b3F%SzFVrgu2X9@ ze7hQWbs)8%)hY);rBS!56}#H->{d`|wMzb+{yzi#e-8V99{=;D(f`x!|5jrEmrI^g zBA35Ywmqj@YuZk$(XzYEZp-n4isSoUtL*x%M$_w7>fLg;RrBmptJJJHwURU6|Nr## zUoC%sj`+X1{r_drKVZRA=^v^p`mY5((23g$T+gl9uG6ix+-A96X*8RG*9yF*Q?GSh zcvNoI{Z_5)LvgoW56We~<&;|8IsJcH`fq%MKAv>`cOL)u1=0W0LVuE|AE4>7)2x?4 z#}9y<9IxS^eDB(z|GUkm->6lpL8EE|OK^YeZr5!9t=pBl*C2 z6ep?&?o_VZO&e&x0$>GB8J<*K&-QE0idStk%avNS()GHndb8Xu`So(E*{rroE!(rb z0QHpr9_N1>*3hnh4*5T)|1XLD2@9Ua1gNUw1VOD_1p}a7w#$Cmu9m$L%6E|Wo?m}2 zl^q`%Zuwrf>2~X-QneK{TaHupoO-K?rvR(|oD+O{`v0psz&!r%zXSa@o=pCU9?&h9 zYF@2bZ`7+G<^5K*ia7x5)k@3tOHEMugG$hF%MI6qS543eTEGGtb*~PZH)w_Koccct z{eO=A|GEGFOQZkF(-}ar|KIQeuiAfdJ>1r7mhEQKbE>ZI)|^tcR0_OC;0JZLTWVDr zPPgUzbq9KKssWH(({UR0(wqZ)2KxUD=l`p7|Noap|JA3{e^vAUS6YpxTlZbt^BR=- zyIZRGcGdRndbwNg+6}*1_bRnUwcDus=wAz3e#vWkZmV4SOZ)$G`hObzmp^|?{?B>* z@0UgYU>zntX%tTq}zCDl?hC^!64y%BV4^=_?J_8VQV?6d;-;W|)`F5>DcRN5occcp{Z~K7`JZ|I&o7MrtIa1ffNB!|Q}N4{rdRbq#cwt-<9`LS z`Z;c?)-1QWwo`3Z>{c~spxS>QRLhlex8jt7vgeg-7Yu{B{Qn&E{~6+c=J`LqIQnlr zo&J;fpZ}k|w`-E?NYeE7dVU41Z7;MkBN^eJ5xb@f+2}$SGD)VDu4FP=goj5DXW1YJ zWOwhZ?T?p7kwg}%zyazckf%_HL^n~DnWu10)_GockMNJu%Uar-rgeWzDFPzN>s0lC zW+t(4`Wuv)w2b0oEH{8fn`90pn7sMFJ^wrZZ}Y$Ig2VjZ%m2G;?iYqV(aftBaP|A0 za|o(w1pJa)5{O^`XiWvE6L^lsm|^t@ z{x2(l;n=BJ$!36B8gz?z-$oXTU|+{@&lLVY*0A@PGk4Hoo>Lhqd;^niV-|lBAwKp5 z*jdPudieVeE;(oNl809fbmAQ}+nNa);Lq-*hqHiM_x}GG{GYM^zw7^>8~=2i|I7YA zy3X7(&khEO*Sw#eMk|SG!5;sc#nPPKVP=w%y;o1HHL&9p0mA10_WUz!{x|=8-2cBf z0kn=uUc;ZqqEiP@lh#Y+w32`OQ=ngLEVkN^UpE4YmR@K`fibIW{!ifljQ-zy|L?i+ zugCenQ~J@9WbikH$rg&XST{{;Sb|KH7j z+y%$^znA}$s@Wh=C-q4|dkSz!pbs?g39dBQD##1%1FoxNw!0UR5G%ao2(EjJ8^BYw`APRo4vYR*S+WUJ9>Y<-{1E? ze|VnPIM2uP`FO5#HTz>D`<{$!Kk7;cY(%sjfJTARRXAoHEIR;HtJcjY)H@>dOT5{Z zt3L5pv+K@>c|LDQXnZfsfnT^Z=GfM=k`5$^I0{x4_=jQV_0M_Kzz{M3dL%w0YeI&|*UO#fE12OjGHEqk!qWFc6c(@MLXb#t|p>)7ng zsr$qGCzALb-&`P2VT49vY4TK=HysSxx&ae;J8vG7vO~r=HG^I#kPsUTN57>KvJR$# zAy=^2X4Ah{fqhV-b}EFjRztqC_h6O#I6wOD#A=(V_gS+12INk}?nAY7`;a0T%SA~S zO{CKqT27HM+CO=Lm4OaA>*aDW>oNOgLvhg#lRb^l1@Bu^{Xm$E836XkwY~yPi|BwK zu(N~4Pn#g=U0x9#g%_rTRvB8~F39(dYIbfS`@QS&M}-xZ5`XdUz z>N$iS<(X#9&Y(}xxE&>X6Xz3Jxqx}l1$qGVnmp)3w%MVkrO-1=uT{sG*clytp`*@@ zI-9EdenCtT+7e`a=L+4A;CS#W(`_GOgO_C&mzO=}cQ;EqSVn=t)E*YU4N6wU(LwL( zm>4dNLukr!z|QNW%~_lcWyAh74&Dg1(GLmq2RwM{=-20sz4N4TS;OTkhx8;Q9-pPM z@&`X6Q=g^oPNivo=`a-L>KlHzv0Q@1*wj8mp`pqUGU^31G+9KNUNXYgLKA{Y`K@SP zJ1si?k(&Fx-TB_@_7d7@X;c!U@h@&X6v^2S zP%P;Dde3Zy=oHo%a7d}+n!VZEiwlfOTU~l4vLE^*S#*wr2&VI?Q=K0bzF<}0=`-*y z2`qs8H~UVlDEK0Epclm{y2m{!p{)%hGhn#vutJx7~XR?p=nH=;9|fHlA&3qgwQ zz`^|C=kh0)6sT&lue2;#+mgz$0c5NP)J2 z5xmF;k{x~+SsoKYch?0Rm$fi~=&niEw2ZzNm506@i4v{k&t!aRHZx{-Z<0*E)r;T2 zjsjVrKaXMA>P_CEQVcjKHD)QcR`NlIdF5>Jd(H8S9 zn;0xC92@|n=0S04RyybghD4jnC4OqNL)HRRHj+QmDwP8|LlfHh;MdRD-;X%5ZYO_* z7T#FCV@wVFF++d9*>02KluL!Gha&W^0->8MsA15s2Fmv!32ggnw_U=JqXm-b=5#-q6S$qO5!mr4S8JsP{m{?+NSyJeI*5 z0{X#l76}z;on~ZG7;c#9=6sa*f&*l-818IRZgutE`Yj6@E$5`08S?ttg2tZ0mSA_5 zei2$UCB0b5rw8nr~Ol?BCWpO z5dIzEl3C$!yrN&5EZIdf9#aIMkKj=&3B5)J$oeCYLLIEXI|7slI%$z25=;rw8JC5G z-L%fJ#;!U!+l^kiV1JZ*4? zA$?x45$9`=3f+;5DHarXa>LQ?hylHs*s^w>%;|;e!5@v%eTHgbEJ|DlY%`G%g{Xv4 zeIUpRtQ%9~HSV&~{M3pl8vUiGs`O^#K2IE@-Hms_iHBv{P*px`_-h-gfKfwG)lDEisZxJo^fFETc|HHftHu(> z)w)M=m<|uOn0`;IGRhiz^T|5b{=VV3SA9qjOai}@H_3Tbf~a1oYaHN6z=#rKNqGMk zYKu!=fgZ@zd`fy?Kh!mhU!u1Yxlbc){JFn=R#C_S>38Lfu#>qf(N}E@p{*0(CMFWg zzXv>`L^hEi53N+6oAHvr-O{AJj7MK78~5`^dZQlmzl_+&S$JQz-hMGAR$?ArR|`}8 z{?oy@NwL)}XRpp}2?AJ3MIm|UKV~e(qhm#)#Qg9R;@(%jILpd4*k$2vQ z^Pf7l)O>2DYnDsFr%T?O*S|vgZ?xKV=O9{fl#WZ3#e-9?w|S2M{Th%ig;XN^m%-p)fXCJbe5CC5NLUB+kxM9fD2Suq zV}E%^7Vdo&B&!qKB*_S6w%-Pi0K^ir5ABkm zA1WeCMP&l+*<(_5cjvMlZc4dJTNaj@U?ioT^Q)d~6GOZcFZHg1)wa$}@SqQbqej6x z0e4^;fGY`GKMRX%>%0!^KgIWiUE??Vmyo6V8p}E6!jXDfI#y}SnHh6b`cC9Jn~4nT71h+RaKAa5Cc1{wjnfGhvF(@gn72HWj0JD*(Y z*o&3JCvUj8JkQ*%z4xG~pZ((vTE~~7?gv`b@&_HFME1a#0K+O%76L}40>;g3YNdpb zf7npS+bo%qi>HapN_R;6H~@Ehh)-z`_M%}z`Cg?57Whu?O3SM+tQdK{I+yn7*OdHQ>D8N1nau&Jm7(q8eGUuiOg@zuU;Hs6b*Ahgvr`bW$`Qm zejTcI`n>k@+b&aEA^1BAM^lK&Hts{DUfIn#Oo-CLCBu1K&#gUnGDL#)Q+|7aygMMc z4pf%^&Sk#H>uwvqd)mxgv^K7^PYTK?f5Zr4%46AzPdvuBRtPt@-5l0-+*F(HEEtW- z8M|pc2IIy_7&hoG@+!7s)HbH7HzI#%1#Krmbn*mxD8)7NKdjzfcMApa8YM*fTdbqY!yWZgcD%o5SJY zlFc|Bn{Lr)y+8|RDUQHZv)mY+=g0X~C4@@srJmFsJfVhw&G-zLB0vW=FW}MHWi;U{ z+~jWD{Yu_MmL~2)Ii%nEYxc0?QqGW{-Q7RvzLldzchz2^X-{)~LTua!@LfVTFzulO zf$uWl`T*!6x1pK7m#|@}(dq3iN`n={PSSG;=J!2DBW$!{OcB8sSlN#jj2N@aagFU^ zECJ90%S

162f|+YbV)4uVDB1nwuy_onfIKk|=2ZFuo`wHd?3@b`B5wW%&el8v;h z0|GbNo8CMBI=HtmkP|8Eksh?eas**xmV$ZzBv#g~qxdrhzqjNIf=2=`reaa z=pj|l#{Sqtq4p;-;_=eV;%xESi%@qz*X*)=v>OGSrSu}|x&}V~yKRK9iQBsdN<21- z>62%dxt;hoJt^MeG{lr2yldbJ#&_Xe^5S0fTPND@W}ZYN=e=2HDW?YFgdxYVtE#15 z4u5iTht=h?axSaI?thB{`A$D(h9gnTsbHbj1(G>D}^IkvM;}?vRCqtZ<2A$SZ zrq~KtFnc`fV5f+7J$hHv*_K{1EA1 zA0XPkUV_e$G=P_!eDtq{bHbNTchAty(2ztng;KjqPc(gB-a9>F_wcSq7DMPJqTPsv z%LjjdY-4dbpa%B-XKepY@8J-~x;77aW2TAeI-D1vf#p9Y^ezldKU%KW*u5;&zFU-= zp+k+aJN?`wx^M1(hH`#z35qAbCSxbT?imVXK49@$*R@*9)gY|D(aiXi;P6D-wUs|9 zK8ZswyOh1m3hV=>i4pOl{;F(eTBc9wE+5+H6%pFNE~90D={Blz?KV8yCrjo^&+3Jo z1=Dxq4qeXOxaZ#^b0gB{N1t4dpSp*Hzllu5@t0$CCq{eU0-b}X)9DA4(?lNCb=AW! zyq3AGBbMUNY1|!s$Bb)RInXMmY^=)D%EVR7nonBS+BK{99e5ZBdzAn;7)=A_NfGAG+jEKy>R{C$tBk!=OMMq=gv zXSaA^K1rHjgZ!U--lAt`KvG26@SXCs8jIp)$7|K2=D9oEcB&=SIlb>71T>SDi7@`mixD_&}UDB$6J@0w(;y!@fHa!0Y5g<;XxAkbBaAX`^F2vz;1*(7#}J!nXh z?0NfX+15nEu-Kl^_bSG!XqY!_#V8|b*-bGD3P_1?sx_-cA+}A71kGd-(H;PCZd{o_ z|Igl@3Tb_pY(FcEM*zZvJ0+x_Cm-*X9(yXd{a3Z3Y1@pPm}XBIISpXTG>U# z5&www_G|sAiJ^-jhd$Uk>{zGhCY_;HGdMIH_zg6rpv%yJJV}HJz2l6C0XGI7eTc0* z3orvaptm0+_W?8t`U5aPi^*o^Lg?-`WB|7Lu*6X44SX6w!p6&Ge2XaxJ;56l@Uyxp1C- zG0@&>f+6t1zXb8bSkWAU*@NqK=S-ypZ#y0nt#A~Qq1`D?&D?LM(_&OtdBi!N;ks$< zt|jO)A=FJi^?Z4s7zz0vfj7T^%2~un_>fVSw`(tEGqmRjJ@*`IT@gG-B^kl{EN}Q) z%8AhgMMabPeqj!sRCe`~xlyAD=p&;`!Q@$Ui0rYC-NU|y6q`Y9n9JSb%SWX1j!HKQ zvUxRU|B~u44eV%1-$~W9ksLlLcpKxTuAj&+{sdBpf_`n|WWngBek2k5C>Zlm5^r+D zG}5$vBJjBi!wJmvvXB$uMt+YG`&;)2bm*V6b$=XG0$Iu1=Hzu!%)xfI`C;)pHW1q_ zW^9O~Vb@5hOA+f>o^^^Ni~9vurdQXRf-EkHO*|dSy(^HaR8A5gCYKU%`{;DAOiWfM z+vF-cJE^R^p7^-9qW+OaA*@&0$h>A(wJVD`)#sK@wSC+942ze2(+(RYPMcUf)(tM1 zwPD$W7D*FqKe@N=sh{m>6Xq%X1d;u>_`jPl&~dkn&CV@^p5@QEOjfZnc}RKr8~e5e zWPs1e?SO~Rf$pf&Zz%)3K~ZJFNb6?-u^z=@Z8=4t+VLvU#PELNRJv)G^l&53mp_PL zMhn7MDh>n#o`V4Ad>Q^M9as6l0x!Yg<8sBe?4K^Ruw~`2)=?)w{9}wd>M91YX}8Gq z8!VN7z}6ZCv1ki`8=e*}GX6c@c{_PTB<72Nvl#l~!7*qC&@|5JE6Nps2pd1Ri&jJDAMpe0n`j2~NOB?5uj&xk8T~Oe^ zWLoP_^;E}#ema8&^igz z4f1}2ll!|G1#&NS4qILuC_fgNJ=w48!eRKGb3r+;`Be2nlA|9r>uI^z53PC>m&l#*{c7YgOHRZz>cYw=c2(7pxtwxORt7&d z6DGSpkyqkPFvb|vECYlSY(X&yeuhBW3Cofk_3roT$xku+pEA;H{YcaJ&g?MZM>Nsr z3H^QbJkjsAf>_B&ilAl`5&RE#L*Q=2GlQIH<+l5FKVKR=oleQ)t~|s1#E11lCXKvR zsN$K2y;g3Y^S?8~`h{R}A36XJ9s$o1M7{8h;hZj0J7icnV&Ns6Qq$_4ptSG87<*&% zM)`>cR6Bj4-vXZG{1qUgi(ubT;C_G~=1nLc5Y#3tZ%xI9S*91=E}%Q*s3`l2L-Ya- z-=qGUX8HMfsamZk4Q=Q^-Y{4rA&TrnUPgdUzzW`GowX>9_#r-#n;zKKrESpEKl0cn zA95FC@nbG(7h_kC+)4OZh5c`r_7 zg(i5OH1ax@kz2MX{>QKsRQn8u{H!VK3(z)n3=k7YHsqa$LxQlZL(x$h&b-0o6E3yHZ--PO*IWQ>)z^7X((QyexRlmBGPU@n#+FjEYIk&+j3_5%8`5tyz9DN_m%n=_XB5& zXZj?vM@#KC(;?-|B+Vwg!<#^zY|U0II!o*k+Q}%bIH&%_q|-mm zBH*7k{u3MB{7;J$Xf926?^9jz606XF)fzkxt8oOxO=li*K3UYQs`hb6tTsXC`AXpMrNNU0Wdbx~4*m>Avm!6ImyV=pj0%tS^XJK1YmgxeN^cKRoU&=d^3DJQ z@Mbp1u7ddV8z}Y|4REQ zm$%9yfGfS+KlbJn#}PXst?P)d`z;Bs<56tM4L36kq6!Oiv{&gj^ecaWw(q+Dg94j) z45kqTfOT@EjGcv(!)e2h3%ny=48wkrh6X&VICT0TU2%V(eoSc60AHiUL(J&5zWxu8 z=OM0nhnP1Mh|=)M{%Qf|L?uL+w|yo^h!hXlx~r=(HX@&@^Wrs2Jtw%|L_kBsBo=s* z=fSL-w4XR|nn!L)7HDpRMHLvmN(R0MWDH3TK@2d!D)uAICb&JU?o$@(%d&r1AqlQ9 zg{Dy>f%hqSBxD=HWwZc|papvCWGfD~r-fEKyQhul>AI#i`~!j65_ zji26uN+w=z`T0KEpXV=2YbZ33OH}adAX!GY9-`D1@$Ft4QV%|;?4hEd@2`Qb2H*Jy zeGPPFBXhn@N?&H!*T4xyPTw5 zJZRDOs@ifMxiWZ?W@IwZ%Y>TtE@qRA{-#I4T}6l> zrPmtNAWmb&rb;$_dNJ?(Sf;UhPQ#dCky7;V;#K4KE5!~LCcT4So`tH0T@=02XWdK! zdJBMGIRjMw4{mO>8&hQL=e7IA-kAuNJ*+3olDYJ zWIxy$j1)0HlSEAU-bEPcHaT#Rd&j{pQXw{bM)l|IyMQ-Ixyg!w^l=4Rbt6<=mT{?H zSp$pMZUiHZyEhwN{Eq)IN{A#lPr##je8=1-RwkU0Iv2u?QpIIactUyXp(9|CK0RAPB#1f?R(a?cE@>y6h?Ak9=85L<} z4lS?v#HGI(PeIa}2=ErM?(A}RKQ@wFkH+P~n4N<=I=kJgpAYZ|m}{q@gpH*usu^jA z^r&s>l#Rj$KFKhhHJ&ww?&!;VPn3O|pjV@&tHA97Kw82h3G%_15{T(12E+V48CVX1 z&RG)llk5Srp_l8GSozKajQanS~KP+_l$&-j{Tgp-L4Tm54|MVYIBViAi z8Zf1^pxdc)3{vwjyLC>wKFqqT`>km|^hMz3LxS)HS6Qm6n`g_7F#H501*f+J?jyk( zj8*_`Ke3*e^DJ7D^X1EK6 z7-2;9ec|;3P24;V{7S}6oh`~_qp(-A9cTPK)8)Q)sBF%t8*CNdP#3tz!#eNOWHdvc z$kl*;*YYnN@;|->frO;+>wNU&=R?`&UF6FZ4O@7HqP-H!pS~=jp$Z$O`((cGoJJ#6 z+#baA&Op83CjvG!>YpbO`a}q1E>&)pAAZ{{e5q6Fi=MDSSU|o)bwP_y;g zpWUGvW=u`-{QCVB0sD{>kwdsY519Xl)OlwP4)4=)XGd5TB0t}(^`>zY9T*dZitR9x zmpW44bBJlPQO(>C4~44rV05<90q^(POU|1Eot4R1mne{KIj8U4BU$314hFps%1HZ* zDTbH7oMYpPsXTTgT-v%tM{@r7OHv-*YInbZj1vGD&tAl&LEp)cd@K-$Nb#+(QW!Wr z2WVFh+-eLm&M^mYkS`rC9waL_3kW>deW;&*!l7?SC(m5qc}tw(nnQ8ibX4h;efH-^ zGTc+%)MGMmRIw}zsDB+iV`S(YJgopvTVMaoqAyo<%q@6`+T?5Zkj99HKh>ipI_Lt-k)sT)0&f@F0{58TqM4|%rsRjAQvNUF2w>4iCNp-Caa3#PPB3H5c{ z$nQlQm9p;XQ)j;iE8sreg)bi9%qHUBoowzw1{9p-A6yAoo*Rx&j(;e)$({6_5HSrW zcPKIm2NJHa(I1O{w5p!Scl~(i)ZQrrAO%k!g^{B69ySA#>jEvy>vAU)isVtJ1pT0O zr9OSuwZZIyp@3wf#n~l{;iQVNFV*}|U-Y0;H-an(hvWnB&;z(+4y3GND}Nm_nPnIK z^cpp6WnAO?R%^}uWEpYbdp6VC69nZ{h5hzhjjCGW_W%oGa`FFc-+yAss=w|l2){|g z$38I`n6b8$SSrnmn1yU?%M50cIH)?JJ!RH&979-<6asl2Mjco_bj6CV`RZx)&wo#a zDUJ@0pN+ZZp4;%rb*t^YCzHWw8XK+S+0vnrs#s4p3B8T~ux0(vkD+-E5OUS>v1Grs zYfx0I#Bka`8hriK_v&9O%n{Q^yA-2Tzc=TQQlM6E4yszJe}3gZ{)qUMWD>5xzDv$4 z)Vy!&-t1h5Xpe8-RJzWoj=}U__oeN`9TJZeFRD1_?))!>fOv=hQV0v6+vuB%p2eib zPk3e^H2>s?$vL*v6i)7i^M`XuhBE3ft!~sYNBoqY+5l+M9 z(tPgKhgC%FrrJUkG$W<|IQb3xXisnAkB2X|SVo!g#SlmC2{P6mh4l+S*g;HxpAy6S z5%k{y+YexmD}eU#f#J^@2ebtAE>Bn+0sXYfursY8TFg#;r}6dA(HsjivBhwQ=0Pbo zy`qlpFVKl-BhenB^tu>EFmukdM39QBNl{;K~Zt~;akh#tmgTRu>+KMaM zBFWbhYWF;EP`npV9$iRsqVj)wjq7Agxg1gBDfZ&h;N|j0>FVyWkH4BVlyx(TX#TQm zK%DJ&3Ic^EH%jLK=Qb7^I3UMR5R5Sb+X!u1hQ4~el;k-2DNouc>!MeDt-e;P)k7;5 z+l9|NqVyLoMX;GR@?xlt`i(4yq8ia}8;}eoV!XFmBKNR<6bF;7+*;?=8P-mIeJgrb?FrWx;QN2+Jh(Crec5jmyBpXg7kdBJDF$WN zLig-0`)exVrA1UWw)C`o<bq(G$i=HO+5GMsN0*dj?bXx;^wo3Qo(f-U$PD5nVlkkU1RfyCHFOf# zUZ@CGgIPk7AH%&hduTy$$mbx!D=7o|J-~nbfG@w1*s+@lU%qu}nzg;`w(DEp4rQ}D zXR3@A#mM1tniIcrIEH^*gtDLq`@kdkFh&Xp9q@L{E2!!RgGQQUlf7Fs67ImS|skuAFwfr|M=ov$LNpb!SI=Li241zioYpSh?3*83k_hwjuc* z1QQowpu4}v1ySr8!1_An1kwnxg|h}*wG_jk8B>?~Kw@t@xeu_EIB!EQBg-+ALI|MA z1mpde5P{GOrVH0?C{198Qiz2|!3K*>FhT3gCEw=4bwJj~k~d1$b62{@>nN-4xH@PD zr3mL>u#`;73>s{$5;xaNLWo}`v27uN%cG#Y-B-;95QZUt4i6G3(nrDu>ZE4wPbilq<>C=~qF@I8Wi zCky$Gb_l$)_8w=wh{KWyk>oX239sDv!k!JfsKZZQ9K*ONYv{WAN#G?+bOpPUsLwAX zh{hO%8Rld440livacRxw=Vjb0;9679I|H>r_$}}l46)3inFC$|+<1O*i=kS|>%>yd zdgw)#h@|mc<8`@Fsj_n$Lz%3euQSW*gn8)KcdvurPT7r**EhH`Rp!&`Ohq42k+}OcP@Y%@ZQcri>@1tj3bjn zp*pv$Pu;gx>=raT&&wGH>V5sJ@81Qz4JegX%j9gHQnfVD<@nk~bVQocZ@?u5w1Fs) zGSEc89UX@;J;0K~2vtmlo73dpaFmojcB@BB)-|=vtK@uPj+z|(jWSL+xf8P;@Zq$5 z_36(Bs)HBgEyqMW4+B|i@U#Xi1MpkontzfHtzgZ;k?gQBF{{w{`z?ge5QB(z2J6%j z_QVe<&%|h+JwJZbu=1MywOf7M0~2$YcI;FJK)PaNK)^F7xE>4lK*FqZyVj0E#~ln9 zoR3Ow^F4T{C8mF}8egFN%5cXZ!g!fR?}rR<+JcOEh^zo53-Y#s2|XcFv|e^Yi*_pe zR_Bc&%h`g&uZGl#49ZY|P^OHY&SA(_N3YaWjPAF8HPfB_zl;9+0KZ}Lzypa%@nhuV zvwxATC(ABFKiPU+Bnc*gG+fJi{+>U5BS)N^bA6+zBhtK17F`kXGFmjZ?K_V!j*@pY z-uEd`FQk}^(1*MrKH$}7NnXx*r^b6MQ|;`XSysvUAwvTwot4J3NZ|y>hoSG0oK!;1 zsgm;A;?pNXXa0K&G)VoLg=HHnIa_gXknXEXd1x!fsWTKU)~SL*>w$W!&+(sL#LW~T zzfiT5UFEEHit1CBwQY8SYE2Z&QrFpVTGp^9<+W0NSK(<#q%r~Ah>?ZFNc0To{tzmy zn*%+2dh3vV^o54%h4UP0oL!1nPv?vk%`41KT~K<&-yM}A$7Su#Ap7wJ|;2V1}>0;KhQ8|dRfAA?E=R7D$$bEBr> zV}Bg!9DSPO_bCIMsl4awFl2P7N zy#7=kR-yb_-f2enTiykF_b>`1HZ6>*`rn^6m+Y$e5S+uUFKgUz)On|t-j5e}dLsc7 z4v{D%4J#($@sZ@jk5aiafYk>(1jJ-t#sFt~^0xVP0|Tp5*cqJ^GfK%CUeq$QPO1tm$g?xf2FziQRj ziX68FyqmgswqxZP))lea#N_mCEOP01B*`t#vX`uD=(p*dU3?t-FzHkrlr}QRotn~o z2Wn(`exL73z^wVmjh6Qq-F5Y?2^d6?p=~BS)~+#k z`U>!PO#RcWFt<2EQH?4;yIZoz?nMriGM*y2sAXlyXA>!zeVA>i%I}Dc-8Mu6Or@z5 z=D<1(yBPNPE~YA*d9BE+TLTB5a- zcB$EGiy|MKejD7xBZ&{J;v5*D$(B`p7ABm2OO{i`@@1g;*Tcl@G1oTe#2V`1Va@vX z?O%JdWBbiK0MiE5N`r6zWO-+>%5&JdC^C<8l1aX=c{-ew+oce1Zn7jbepxJfaOIj{ z-2APGUrwp@*BOu+pgGwl5w668pbRof2LztnLzIk`D3LChG|>8yW_rvi!6ikpPS`o^ zy4B~1P?cGoR>;eeO5k+|_f%s9V)Z?&53<(1cr?!!u<;o_G&KZn6%G$SEN15pZ5|Q( zy`!MXWD2#u9N;${9J17$wyVA=%4-)IdESjlE(TbxgB)c4z2FN4>oZ}0%&!!1dG7LS zH~o;kw{}_aXsF(M;hTnGCLQZH+TS@Bgpbeo6`rr?T!{5zmt z12*o{|Ngq&D`g>|b$$PR?sdJ}Dxc=YVt*9)_qZ}27kZY@y7#7g(Zugzmiu1sEZ8AH zPz{WKbdbSdSq4<%1n@!Fo9j|Fzr(Pz>r?Ttgo=SD4>!{u@`#N(p0(DR)OB1K8n>M! zV_L!LGWcf)kn|mD1T>_Rusv@y9P`ztH!GjqXC1C#yue>Rbz#i5K%j_&c^0*R_7Atd zOiQXjX1$?(61EojDuAHp0E#3)8@aH!9j)_%^rwK){OCqFEANWtO^Mv5KJAu-H+H>E z2`8c$6?{i3mZAUld=>0If{~;GvgO};6q{2sc0Zf&>kF}kfkC&1Mm2spzDDcHe1bi#pC0n>W04K}()HABY2=6apfNQ$`I+1||j z^f*uT3X!4@f{tF-kM-KPrnigoAdp}Nrec7n6O8X5l!B!k1XPiB9XIuL3z|>Fg}k?k z2>a&wkj-pL>Cc>7BU^Oa&=rk8Pt@K7rJsVjXE6GwcyE-{g*Yz^Fed8iT*&G1JjyM| zOo)!0n=SN!IzPQF5WwdD+EBg{Mhtgud z*cJ~SiZ5Zta_%UVEKa$_KQH%Ti9u=dL>%{!@s7yoa;~Jvy@6^ECKT7*U;-mxF$Gf> z;o)o^n#~jMPm?xO^SNA}2r5!p7Goo>HA4!H=~_P*PFibVl<_|$(YqM<9reyIsaY%rn$cl;DYLUsJ>yo?F%&12IB;F{(4+KQBCm4Tkg>JBl1e<1 zDR|cnDK&zoHIzphlv129<-(C^kP&s}GE1Yji1v5&WCnE|v2HK3VOH@*Ggh?@`U(pA zB_QcpK+60e1=S6Ds%DYUAEwyAB#J9o!;It7;3m|^29HX~dc#5LkgF>h0_2^p^f10I z0Y!xfv~3jKr%H=MSI(C8C>(ZJR4h%nZJ{H$J6-Nt`15o8o9picAZKXX)OQXSOphxT zUw^&7%D{~Sb+jES=z_Sj9{al z_@%$x%1@6Xb39PYhN{I5(!+!YEj}?rK%Xk zkF*v_a8m%X zCgbgwp}l^RP2DGuS#JIPSW5o6_2JeoiDPekI*ota;-+6@J$m$+VwK%`mWYPdXB`F^ zyzC6hqZdqpKx^{s6?l^s_)X)4&Er+?m&PG)9bxq<%?!G!E9%F>}ex} z+vQE-ZFk$>tDM0+=tXi2o8O6f_T<5{@M0q5&Czm9rU*Gd~%`ZpLn7IV}p$a4o69$*9T zfC9m2unkBM8HZ(3{Sz7ty2HsBn{rGDjLb&t?Tus0Fwo{`4AcN^vxOLj9^1e-04AhM z8OHl>Vq(SsxgEw?0@)GvIP6y=5s7yV+#-V;5z~LTxSyYOeWKxDAs(GJ{G3&Q=-W_s z`Uw(;71D(6Zn60Hf`A<|>L}ILEF&N82(`#JZKn*eW3Tye%NI{=8#y-_RFR8Rb{{Br zrWBffHY7k#vW`6}v8te(cm{%8VPqmF(2rKzL9Q(XlDtzJ)1P8YZZKz)2IhM;GgV&G{kcndc}M{QOHNC$$3mb?aQ|XM@B<``=rUZ8G_jTtzP6ILf}#kXlU zF9=`xd*z1cPDf#(DUnodq2~IGO?IPl2IWh^CHH`ac?ckL8@rs~i++MMz643A(Ve6| zW!QLSl)SECC^0XPMWuCtCeez+>GkFJ{y17ykJf`)koY@Dp%tw(1FR_}$9i)vmDmKd zd|oWSpx|(0P@uT&6sz*!d-G_C%4xRN3v|XR-#U?MB?mJ42G+`@ZyRj@&KW*zBaj)E%qXs`^gAR#D#Th5M#TyGr2*@)&ev`_2+dS+I-hYzE zZ#tCqdfJDo(JN`~3m}!4?1aZ4!>7TU;t;A08&r?ABCfYlqY@*NrnWh+sKs|M?cK5- z%t{_PuN~Iz%Ohj!+|$(j)$Ma;O)t)S6PJNOO3#oDxiV%J8(a?s-h&G#$D7HNlB4+C z@Qceq3BObpu6?Ws;BhOwmU^k-ZidB`!o-NZk!~QlS<>5!)XA~pFkzNB%0h%jHTNL- zw4EpEgoUR;#%Wi=YnuA5oa?xtt0A-&q&PTPq)PZ4xDEG@51A4n;xhQkC+7@ z+23pPSVyI3FxaKPL3D7R#@ll}mFj2LN1VpJo0k_1VqI!kUIr~IgXL6Wo9iwRsR5%( z8z2?_O7*)xAGw1-XiUN}SvhqjmYq~-;`oT@lXhr9}zJ> zKBPler6TH|&&puLRU}JXS z1X7csIXbE!Iogezv?`ZfbEH+c1WWwLv&yy_gv|b>0;x2PlB^2mZ_mzksvq%4VrpD~ z<%yB_1!x!4AW4U_dyy=A&=A$FzzaRhJUJpK19HKz9@TS8UE$a-CYaY9)8_2#Vch5J zhx+jf0aP9^<|*Xo2>VhX2qHIWZn2=YSkM@1n(#5JFFLde76C2&zj}4q&gTpSShlDn zsaRT>2>tFiimAvn$@?c9v_nJ+J+koT*;#bRNq}0VzS+p;e$Pqd@@a$L7hS(_UGVXF z$yjdj)?|d~I1^wrZcr0!?zE-};)EB+_K*pZ-Bxt)Iq;VsKruU1PG?LtBbcAW`9`@O z;dp$v$T~(3l8m^UEKPV0D~l|Cp}8Emyevm$yA1`yd;doqItR%70Fh?X$OzHAMOou&&wl=3ZVt258EIYW%B)>kb9YBEhD0P_3xfhe z08%#TA%gZT(6j_@Z=$;;mt-L}Hi@-hdUb923k}}_1QR%wvo_u{IsA>wujgki6=2oI zZJ=2InT(XHYY5=Zw6T}Tds2*4;jqIA!)Zv1%kmad8a$WY( zQ)%r{=*h=&`}`9=BQgQgcQe#f*u-@DCJt6!-P^;#*sF+vI|Ei}VU#r0+gka*OLjRb zxjR`UKbitFU)(=)-89tF&xA55`fTRKue&2dM`zq&|MM{6f3h~{*AOKXXda`|+%AZx z5A83Q2rlT>_~~=8hd7n>$Vv9zFeF^~dN%0zhu_i?toQ9lL2olw35{Hsw-fn4BL_ZG zzi-Qyj%fTHUXfkNajesep^8C$-g$V^FQUj|MQ+zA@z=GQR}NI^z;z4h&sj<*?&CM2 zRzXN2^aX896>{k~=iPT&XKF>G{y(zb!lA0=dmpAnKtPZbI4IH$BBdTIkWjj%q(MYL6eTv@ zA(9eO(jXlY9zvuAqy&_d?&iQbXWotX-p}ve@B0VLp4l^No)z<~wLVFPi%n!E@|}x| zWCb6p6wZXV2^0lkH=Uq91TOyE@q;5!d4NQ90nstQ1}@j*ARQc>k+^OR!RgF6p2@{k zm@9i74-hURCs|E?lS4Og7Gy1}y{m|5py~iVL1@Sf12E)M7?^wlT1Vj`aexE|-_Wzg zo$o>Y0~}aNz+J^rIUa3KVXMIYDylspsse|E4%R<*0yRvl;L+4BR5Oq8LcpA3(7F?) zyMPF}`5S^Ce7cdin>d6kY=QKd6Y5HG2Nu}VnZyK`ZZqHDDu~MHxMILn2US%qh$zJ4 zuZrwH!T-dMTc*csqQS(DDk=&nBp;{Ol8$cKWeMGg+~<2d&~Jb+_EDJsoabyCtoCfk zET8BuYgj~EGLW51b8Lbp;PlL$zP|?cf1+Jt$@)Ng^`p?Y!7eqP=oI@Z0{buCHoR1+ zzP&nCJ&chb(qS-wA|W>~IL!*cWjdx{BRu(7EUJbhnyPE)GcEVr)yCGXr@bpQ@7^s* zA|LJxxUeOk*bMpJtPq$kN5eXFdj$@1F2GXWE{JZQk_6ye#{0qwZHZJm?{a#Pk?%e& zU5{L4EcU5><*+IeoDF?ZWtY@Qf7kY_7!nQg5HY>S!x_1eYIQ543NY|}Bu0Z?h z)^Yc{$NH{&@`c|+rQIETyIgIuJ<>`x^f}-qheJPh0hrsSf){|48L(F3unTXj%-fgx zUKmBst*YV*nwm3>4|Q0h0N_J!j^QLrA?Pm7BnrGB@>Ttu07XE}J6;&>NjN^XdjgyQketF`C;FDc zj?K<^>q23hlMUzvGi5w4aGwdc9R+!8&xKK);HDamaaHXJo1a1M2X+togenqi95Sr( zJJ+&QyldykK? z18G!;V5oc!2p+XVp?&W7d+N4ZgUM{3+Z4j)!00!&PUwj}`*fepX zV4TJN5bbaM&`J6(z&<${@b3siHPbNRX^I2vgkZYsG2ML_`?Mv`180__x#A_!pvi*R zYAdHUJKw83t9}B<3LynCV$d=n`K+2bXF>WC&dQm+EZhDCV1QXYcQmyKpkJKeI0Um=k6G=* zs48?@puF$q90_WACRsix(unYMde;uODHWFxZhO+EwAIR>qxTUef^0j&%RU6P3b=Jz zbj?e2O*dwWr{A#U(S;B9veZREo4S3lw?N9DB*o#25IBi zO%C{-3l^dhm>UL6*3KSXM8j8nz8<+@jqBx;-q&vZQtLcm7diVhuQxP`(Zp~DWO$7Qf31Q;%QmT(o9lv-*PFc^)< z%%+gGiQGX(s9-B_x$|GjiN+0x$g2d{VM@jDQ3?E#pA1gsP+pHQC7WNtu@o?AN;Mo% zA)v1u9~CjC(Fi3V(CS}_Z&2_`8)xVFktHd}vL*^=Aj|Kpr z;1XmA#_TGkbJ5%-#L7l$S&`@OQRgV@oLptGjz1glI>C&gq7yUS46T@k z!)W(#j%C0a-mSL~`YvwX2q%03)wLA#W=~up{_-?p(U-}5$C~fJw1?1J3zm5M+>?f_tdoeLIKZ;IJ#mT~U*qcLid-WomfRei_yx0%% z8piiCZZtk%oHQ+k%$F5fGrx9e$;T3e$>>K`8fGZQ+(50rZTl8FF+uN@3SN-o^4HKX z{d5^q<8p+G6)eYV{-tnv${Ii0_d31Rk3*p!Do(y!N7=7*_$T>Zsy)T0_k8Gf7UP$> z0AO(P1Q_9-#p+X*;!S{@?B?!libAe)OSpx&P@}$~Ag`UNZS`%K!J7=f03!2`QA0TS zXwjR4ILu34@mBf=sSl{2%ns9`@zELc_g42(?X={1DP!kv|M0-yo_g8}>vPz1{f0_y zMco*${(xnSICD`|K*U|Gmr6y-`sEYX_~@zgL(6r}zrQ|h4D(i?1RH3uw}C+U01adc zn1J?S``!XKj(91gB-OjdE-c|Yyb?5!#hGVaM$37y&&Dt*z2Vr9oX_#03yG5r59R}w`4thMpx zH3;1j*^=LI()ujOD5TyRRJg!lwL~CJWINtdls+4tV`u97Q2EN<2F%~zQvIXDiBAc- z!o|v0@8GC?3MyDiWxr|}pSQdJ)SmLUt?}y|BAUw<8R~v^0yk2GUiO_T$Qv+)4W8~f zJ)GanIm~L;0=?&<>Tktyf75(s^{lTvz3=nwliL?P%Sw7c^QG(J0sH;EOB?7#7%N9% z?vw6xTHh@AUU%h_5IbAd-F#PO+ELL9GLqAoH^_a>cBPsq3@pZxI*V0me0!V%&kix8 z@W91C15dO2vR%*eTA}+a_2r~hyqLqpM&V*s!{HUNM(;n}wCpj-$8QdzFM8^u9(u0M z9XEff++g7#!*s(>o(FjJH7c9AVXt>PeCl#8U)`X-^@GD8bzQ3ZXWdJy>;?*>-T7NX zqlqv3pn6yxgU!={H5EswHGGSAA-E<1{MeDQab#&VS8?3?VbosI07~u5L8m#R)A*%l&lA1z^b`~J^3sv;52{S1TDC_+Vce!wZHZapFDxO}%@+PLsza+wlJQo+0j+JoL=0t(7W zehvyB`+fa#Rq}^>%zq()Gc8Q9{evXdg1|@zG=(g(7qKV>2)5s%MG-P_$ zMnAd=s){9l(|RezKz#{^cKkmp6-HK3NaA<7dz3-nk`PI6SfaSD5%2CVXVnU8r&F(9 znbokVoXHe6#i=^Bz#%IKT;HOJDlB;T{q}9fog+@hA#ACT`z?f7phlEq%5fz#XQXCN z@;fzaXETA7TTTEo@!$ydA(O!_x+dnRMxh>R)hp}LlMb|VEmg?A-O#nydE=SX$cX1O zWU+Glm1EyLvn%COuR{#9vjf`q!8jTgyyrMo101Rd7Zfnx=wOpwX~494cUSa7yt@2) zY#OV-4nr$%YDYn!ZF~Qc+C1?dXqngp31Q&!_AmbyfwzDGfrj>_rb zLJ<`EAB+WK2>iH6;p|U>Q(nv1p8cEjUIv&VgSzSUsRIY1(*?`0)5!Ba1z=d`cuz z-QQ_e9@4c|d^IWcxaPtl#HqnXvg_P;DNd0Bi$ni4CGMU7yR*wXNTVcpT!jCj=*|WT2v2?i^;iftU$>yQfC_d3S4A$loNRaEy>j3+4)F^j_Sjb4qXJBe;p^d0*CA|KoAmZ)4ju4 z#I)*aO6IF~q2o2Xd|E&eD|W44gS3l>nG}7u_S?ukr#xKQ))?le=N162mGNH`2hw5%jmza-*Sb^}{r& zI&8vC&;0=d3R#Fm@jT@n5C1o`TpO3QND2d`-_EWKSyI*mm_qnxN?5)9nX=&sO4cTc z4;H|eB4eF^_{#B|23slLw5}FUJTh1;+s`G|q{nL(iQ6VV0#D&H`Ahteogj<>lssou zPClcQU~D%k#(lss_tKSek1Q^-5@LqbELZahM`X=5&pQEJnyNAGL<($vgCP@UNqj#= zgD4#dmQuUna%Yv{iKI!9&Zkd@7k*obJg}Mx#~E=e7ux6x76oz`dxM12S+@Z_rW*kh zV=<`b+kmU5p*HwxG6j2fREKkuSux8aTI+%#LkDf@#&sh4Qk*T zWPd@4>JIo0GcL7qRh|gyG|9vtTb~h_ZvJRA`sBTD{{T@KBEZ4=DfN)@7ynma7kWL8(c3$ZZ{L*D+GlC$JQL>(FjHUu zlG|N0d@8C8Fl%y&8KPwMQ1Y&k??kDPCX$kgTx7Htu1jC)5%$*}%OATN|N5_Cr`f|W zJii4ALO7FX7Tvv@#Zff;Gu-Ca>j>tjxr%%%u6ERz8fgSRa7tZWBIti!`5K&nrE9pU z_5aCi-4P^SKWgA^`$b_ijn_fzj$%1oEws|3aQJpAv!~2LMt}4sFL^)~2m4Pr+OZ8b z_F)$ZzSX}0r{{B=^`!`@@19Y4Sv})FQuU9Yn9p2|m<(-)WA@K{Y?k9kXYUgSZ$JR? z3;xMdRsGLur#SgFy;#~qKD#^%JkBP}=3ZjU*8O&iPWCmv+HdzVXm7i9V7kZj!XXkI zb`Ao>BKU=d9W&r}0;wk9P(3&o5*On*i|aqU!Xk@K&Lo@<>p6OMbiL5sGLn|V%~Fg`=qg3owMFL zTtFs@>k>5bwaFPQg6;nZpvN|_YU+y$*1BE0Z=6XfE#Q4!#>(i8pY7V0u&-*J*5a(B z0eVeezHJd4p+f#bPTgr3QiM$~sD|tOuY3vAx@g2S%rAxO(G947aJ|>h_iJ~|Y=Lc3 zoG^GP;}C`G`&(}R*nc}APNgu&-`HRdzhLj?dHn{gH^nZpeV#^I7@UY)#@|Shh&uFjuh{`o;X**xU2S>3Tm)z-rQP0Kwf=$ap!CT+D~63L2h`AX2`8yVxrK)NiH_YnmBg+r$> zq==h(y$!x4#=(t%%KYo^=9eaEQo24HW^@^v31UrWQ3xP?z$h-CC9%_2bg~K5|D}0< zgJKxvhvLcDWpZ7(^IYS9H-^4^=kM??R;u!rb%u8jk-V!G$My@4R{)*_-lTuDAOsv6 zkDyl35u1wi=Ye`79*G1=O?pF>{g+!=ln2?3s!CP&9uN4rHG1Pr_Wz&c{k7D~$uACC z_>Y+zXNV32wxV7j3i|!phZHv&CpxY)S6OdQdG5WNE&ci*y<0@=-A&dM%5_dYJbd?U zG=#c$i$h7Uqm=5tf^z!%hC5Y{8zbhtsW0%9M&>kofmLuiYa{L-)v!McjEpYvzv|;d zCA1P3#TxXJb0ioyMCd2=e!60giqxR~fHvU0;KCTeAOilQ?oa=dHE7hJe0nn`)SFLN zTQCG!RsgZOcvje$Fh>wBma)mDhj}MW*TSmzuSrpV>!W>jU^1-3K(T9ddkm(fzEDviVR=7CxNu+$9C_HEZl+JA`mk+zI~$KRzHlj2uxvN9p3|Wrb(c>FMQ` zGv4DV%_uEpy@FJ@|D0{eO6kiU%ln@VCw=g|Tz_C;8+JQj#EuIC2~T(h9pCMcGwo^9 zx-8K;^W;5f{9>VZg~F@>UycXZEru8%YVaR1IvuF>#=~dcRG#@Xl#s^u-SIR*Itqwl-2Xq$LMMy~QiD6}n$w6S|fFESEx?0QKGi4_cc z1R7?SN@rgPPK32~+<%~Geip2!+{00)l|sS&g8V>+i$jk7P+KRwstCylfr-O4)* zR$Sx-Hh&wcC4ao^GmD^zxT%}WloBuBH4%*p<=_=IzssL;S)^x$(b!-}%x>6}*R!}w zGf-31ejkTLI{)jYfs#iURHGF=lK4w}{3kxUL;24lVV+RG0Hw})Xydibd8xfHl}OFz zEh(||bDsFCkmTQ%%|8cvXtNwLR5dbE|M8*He&Xkmrwy-7Dtij6CnF#D^7LlkH4e>r z@Jjm?{vSKze=1lPHW*TFW*ysP-SH+BWk_Q zE}huQs4ocBpD@oybG^`_8Jdyt2`pq`~AZ- z&Z!cpiydx#$w6v^e?Gb_xFJ2iFxCxSIbF#G6-{iU`0=F)EMOx<_h zI^@1D`+TTjd!Pc5XC6&U$Om%jy zpE4x^MQtmodEZflOOsjrJY*K*cpN{R^+U}Y*2B905y3)OB_6MlBxd8x4q8QhHE8ap zCRg5cC)cVRI&1BCuYrtGrVb($rae;+j!pi9g2Q1z61iZ&T5Bb*D#gNGG`EE)?b!|z zN_bb2aL+y@>)e7!){7q`nf9N+KCoXfx#uun>0E|gv1oSVzTNkkp?j`m3H$AAgPTIWFm_xEB-5C3+_9g#} zol!a28wyZMgEKb`(uX4&|8dxL5opM8VVhifB$h=*=Sblq9`V9l9x^X{d|~LzRMKzK zRKw4bC`p#Yv8Mm%;wzv8CYqws8%NGt2KEmOl?a+Ihjp62w!^Qc_w`=OKbw8|-0TZ2 z(kk5qH+(dB@RyGU$M0a>1}oxyIL;n#HpFGoh~lf`73ybxM{jZCjq7JNYy2VNSzp)k z$GduX$|JDgkNyXJt8OHLuuH`CWW#J>Q1B&9ua*H@p1W5!wGGdk8PMI=!QUObLoe<# z1t%Py?k!w%7LLCF0mA+^{0q}~RlGV(^HSS2M`U-xK6z-x)G5X26^psvajft^nq_es ztUe~!1E<^b_c-_`;eVtll9p;wlIwLa816W}dCzn>&zqM(u>A&PNP>|**&-=_PIJ$( z;unMkokvg#c)18_rUBIkxN#PcW5w+huB7Tj3L#RY0rd)>))Fv?g3N(4%>{v zY6(%x7y#L839TeaIxg(D83dS@q#;wzPz0J*ipkm#m)?EzVra;hp%nD}iD&$S@~3|} z$Wtt6*hn}uR#@jsHC zEQT+NtS&i?t}3Tx>8AP629CVf7~m7Upzh63ihKD7Zm0f^y}17d+86OZF!%z2#2&(kM~C%9eXn}h%(8ub%s z=MwlC_Btu@=EYse_^3jpHB>r6)A(&6%PxAZ)Vt+pS*IP*%S|vZJPp4{9K*)vpBD*+ zLlYPL+i|VShFONvftRH!o9xzpl5*2`=_W-aqPZ-!NmpH5xuDl)G4R2dyo5{noCaTL z@MMPM*f6H)|?iu zxCyK|@uI}=?Btkb!UVH7BzQX1gDyHpeDGY>qvn|6%%}OxwJj6gRCt_tYEgv%)YH=t zIUN7pz5-{<0b{s}bB$}t5{HJ)`p8&s(vN9v(NdccQtfDtRY+LuO;pbGjToPUKkoKF zLzl1MgmGX+;uBKr^~~FMp4*{>^7k!to~cmHYJ6}@yzr#z6%un>x@C@~Kj~h}AK-&y zxlds%NrPj#>R^-NpkE(~(A{KR9hj~#GvlptPYA&y9yU{SWLXo_3$D`b^3nD^b-1yp z!_&G29=KISj0pxXPG(i}EC_|iXcE1)!rZuBKXgs$rkVLo7P6~aR3%M3AKtq9ro&-w zSnq+7|3!#9#{sW){i^hq?D$1)X7AoAK_8T(|m3MPHkHS>&`=`MB5 zpAC9>2=|>ef%_tb0N5m#CdQ-P93hDx)^@W zECPpKs9^0m@ptGM4YuG6iq=n=EJk?t?_{#8>CVa1MeB}JgTat%woB@EAa0{tBt1zE#@UVq9w+HCMq-d^}|Sx?qtt`36rlOUZT6PCNj ztg1xF;1ixoI6NWzB&1b+dQW7)Itvb-Fakf@+5Y`={zIsBf3$&8IP1*sQaJ_LpFWS( zJp>Q5f^zC)H1fA;cK*H8HRQ1kwoj#t(XKVfr|Lc8VjlhGK>9aZz5c*?sYe{c__Yh^ zU0uy39t&{9CJQE|{WT%?7$mfjmO-iCNxPq zt-_<{QA>@Z^^2&X127jAa5pMry6*B4n+O7m`Tj@iI~GB?qH4lj=h{VE{p3R{QW zz3xgAo|QXOeJZ$7zQbOa%0#~(b|6jPVZv<`2IMz)(sUzXCS(`T-B5kITawoP(s6Eo z3MLsZG$zlSS8|;E{2EGyro&2%8;|+)k0(Zv)Vr-Uii6>OC-z`<6pHFwEQCA`dkb$) zd7xincHHLMk$bd{!E5yDV=tJgtUKk2RzpOskD%O`Z@ovLj7n9^(#Tvo3d6vXyIJ)f@QU*pZZc&jo0Sj0xoRSp zr=KY)&^1IWP9J)gzjFc;^SC}{6}=8lU}-KGV`G$~fAHlON$#&+)3r2iUS z^6@bj>T*NYmeC&0oaJb9$8~hp8Ig8fV94&lek6T zjSL2A)!qLZ2Wxk$IB-Iftx#=+IO6*=$pcHTf-c*T!7hsIR$DU^q_T`=NoFw4(m40#iNzg8kpFL zd4rGHdY^_n`P9CM4DC>j*)YMyQhT6xqh4b+z;`gYzv~!Dwf73VfcN)(TFcFnjaMh( z9Pf2?IQ29Os-<7)K*`3D>xTtu?(Mhl`%NU7(K)bj{k$JhN3kr7#I;H90J!+X9<)CS zj*jc+#5~|A%g(6o)K@o{SpVwXjMv9+9!Ke_#%#>hIj?ON?y>*4B@t9&m;EVN{~cjj zNqM|Q-0ycGnm$?jqWc2j!Ju;@Lapq9`Mi_1r z3kfTL;tYx|5!kxB{AR(<-IVdC9e4VGuFZpX%0k%+f_M%_OHY%1J$Pu zD>l7u7IfbL75ku3c9tc;{YV{^38*&FuY3vH?EBW}5}q^V5qFxg%8HCxo?Cuz^3Wkm z0P&bzo$uNu<_fvoRXB85@~!?De4Fq5!j`MSpC#rVBBA(LVnKVomPo2iN*lSF84aOv z1y^k=^XjBba(8|PIECkjV@p+aCb zy3Dj#(j%}2jLCp-PP(QGtLgN?s=qc zWX(jYwj5GeHV^kjh>>K!9s~Cg8-?3YNhxkmGd!)$-9y|#AH*9~J)5}f=$w+3P<|65 z^(yO~L?H`{%=5@Oy-9Tg5w;wSM?dM2YxSsjoC((MdIlI;+Y&L<6e{4k5)crr7xv2U zBg?ZV1?>$M%6q{O{eG?375noDosHAt{ZKM)P<$CS(;6;db7L+3F# zR&y%WzjQkZ(qH8q{Y1!=I%z2&?5#d3vtK3de*Cbw;r*ZK;s8QWg6y82OXo3H$wS$- zlou?rh@doD1{sF#`%-Q_6p>XYiRML0O`lI&VmLy>kQWzr3YV6U2|V7;ZVUf>rn(F< zigQTCWf5*BQ4Tg-K*Y&&)qCDe4jTPMElaTT)=czA-AGwr(dsf7F8Qj7Mp{p2joT;V zt6cNtSFyWiaeuHwIl2I8b}u&Xl7TL-_)d9|45IFh`4HiGwb+xQ_wD^p?zH@zExX82@&X?jRoQR6c1iQ!_ww&r{t=jq`@sCQ9JT-l z^#fwDw6SBj+YR_Y+?P8loAwCPHn8BdL0~OYA82r+`lHzWPCOAi2qun=1d!NU;NAD+ zx9NG?Cr$hUp-T(+O+s_6yh0CTbXu*N3_2Q%tQxrXmh9|DvfHv^pPnmKYdyc9U7x+i zzws`u7@$^Xm|SgV}(oqh-LWOia(mFUh=^V zwCOi%<5s}dY<~42^Dl!le_Cij32=dj@4yq+4gcbc$fc@W$C}(d$p3qhWr*@NGe-^GCWd9YPze+p ze!jRCqbz2PG_Ru2esy+B#w~MhxnB0=!4(!un_s6orDhq0#eMEW>4R-TfP4!2eyyUg z&en5NMQ#ukaxUcJI`0@V>3SvSt?%7ssa5BH*m+vnrM>eCslE_Wf6Gbku59Jg2i=4WRyo1rZt!|^Tcrd zaBglN@m?Fege%LBLQ=P|(|7j$a`#a}46MOUDN}mT`quStDo=B*LhZB9le_htX=DgC zAn-A?ev)`AqtELc7Bx!;3y-G_y>!IlU6G;a^HiOB8Hsil&;2JKk)OOcn>!=bpk#ePwjydVmdYN;j!;W|Z5HBH9-(bH7jS1gK z1+AfXM%>#1jT5ZuOzQSJD;O-lWV5dNXH=Me#k)a~;W^JxL0o0OhiO=$b6ZIfhAIoR zOe1+{&AU?aPd4mJt!vGvjSV9Nd@Um1MQdC)pQbVRUNllJ@z<|56)piyG@QTcdHxs> zzt4b7reh>0Vk+das=r~Sdb+;emTkBZS9`0+`3mI-VVTaeW`$4HJJ$yNH zkEsxcFFmwys6)8_FgA!*i|T#t!29dFVN8oMl@t{;dO4*{izv&6YJ z#rgi?uBBGvPw?ktx}YlltsxAOuHamraN;AfI1(97u6D7MtPj;u0?-Sq+OK4;g%xZQ zS-OrgBwt1_*rWT{_MHY?A6%bCb`&5sf>kw92(PcSlH)NrRZfE2B*n!8dLMR6-JMw} zEOplP3HPp*v3NecF2f>z2YqjZfS*2Ya39pcq9hHL3@+V4gvG>PW6kVk9O-7%U-j`qx1k4ca`%w*VGGNkf?EbJBX_p#r zyhUatyC6eWJaF*=W5BkW^rDxPTmr-9_+@Ri%RS4?$50#pmOpMZo{swA;T)d|&7(E3 z3s${S)Yr3np6XFK#zv3v^;^b%=Wdoe_#?T-AZ-}v!(RF>ZXcnlhQz30y_&(he2D!c z8Rsxc`s_r{Mb5ZVKRqV3#o4co=`7-GG-9hC<{o_+!P76v0J;qXs;(!U9wu4_k@>C* z@ARQ=0f=H@sY*(pH_IZHv{#a3^{($Vi)ZWQBR`K(2t*0!TLIDQaLyYxmv$)XrWVR% z3qT#$7xpi{d8sqdN$)IX5O)8h$1ybc3Ih8fS2M#va$7{Aa&8lW zeTfOhB?PW}V!6k0X|MpHpwWg2Tus|k)7n)+~zSylz@+rO+K+{W-k-)z0^6zp*J;oRM)=s6UtSt@BfcCF-P1HeosAS|MK{|H}eCd-008+?pC6 z;pYyJQ8UAR`4*b^aB5_AX@uzP+$_}<>go-Nx93TZEb{l;rb?H4LGkvs|F>Z9w`;}o%a`vGAB1Plt!3}p30XBh}&6YZK&4Mn=Zys+F zg>SUG4Q4c3q&_b5_ty>Te^l#5h(PZ~npC!#hTJu6YI$`)cmq_utl_hz#j83en{j`8$HM&^Ds?gvq=%1%tU zcYJ*0_`|eugv|b;(P-@1-i$#y-lnSF1S^*%rihQcD|2gA4z3Rv?<uvLseAbdbC#q$oX5)*X+l(#EC|T-LhEEr&FA`>rCg#4%+w;u~!83KE&{Q z*pGRNxB7G?nN(q~}E9H94yj7I>ne99*rVk91%mnL>_-Xn> z23Ezo<1RY_=USZjD|St9Kdy%rj0&gf~Ju2}wurPjO}M%4@unOdL^8xVI`wKlx&f zO}6s7d`A*3Hayr^;SKYEplH9t6;AVg!v*E)N5vPCm9srQYlwC!Yx~97wDT`0R8pkj z4-831DE#jHI1Kr;T+uipbov;hGH^aAn=t+3u=fL>A1Phtmu|aSMCJZ|A2}-_eSgW; zPeu^hSs0RW84u2PI{%ob`bL?W44d^Ek0-BKjl$Ix(hKI2DRLuiEAMZj`P|~-K1}O) zMNUg<@HIIRg?KS|3dk!hR9NEat42ovu7i*q>plPA-wDI_cIAz{1iRu@sM6Jc+l+^5SeaU z&6P>%iV4xvh|@DWH)tSan-Z|lzrSX@VHjj8y4ATwR_NUNJn@&+;rq1;u3&@^Y+SrB zYutOH^Pc6EXij(Efs2{vd-vIEjT<&O%uBSMjdO7=v(J`u`2=N$X zI-o{sk9j<%)Hx57G-KCV_oo^n$Rn7+r*B^O%c5udRpifKZp0~}%v|zzwvj_l_XQ({ ztPqfzMi*7w~DgTwa7mkc=}z`NRj7y&|t z;Rpd;exP*@6CX0e*H;)wY~>y45_`p6b9->CKHIg_6EU@7pmm~SNh>CDWMKL~F z=s?K-nKV)1)EcE>PUvO_H)W8ALUKPNXKBFw9t}AcQoHH#s*3@&*+iaiztUtBeGz!A z@^btZx8M9+|60IHreMbC9kR-Yeh7u-%Y&6Y0_>&d8+!VF-wD-t%VfY8)^$?JC-~U+ zp4XQ*rp3B0Ns7|k-$?zXu9?Ix+-?aRbPIvHg_u7b7>b;~p>-skK3(R;DS7j@8zIl%B$Fa|kNAzXIP6Q`-gEeNX zAWhfU?{X?H-+aKE`&cAFvexmI+!eq0(tw1(N(q00zV>5f3uo)|=@&|kZW`Y1CT_72 zA##!qT9$6kf%CPJEHjSH442A&{;DrOcG|uBa7D#}@{4tsTPS7659_9AiLGn)l!=p* zX6U5^ex=IDA99&@zq_8lV^`AmJCsJujg}O`|7npY<)bU|xQM%cI+a4j|67Jy4$2hQ zJxU?$C)!xa=%|u;CJD{ug&-D73U~+vl`JkX-fHM@LLl)OnkcoEj8k6ejxsIbfRnXQe>a#oCLcy zH|N_14#(Sdk3IS?^sV*v34gat+tc=MWl<0w8(_Hojrjl{FH(j!H)TMLx8&y4>~QW@m`Km_Dq{qx9d}20%avjy?bMkXQ5mg zTn9Hv~t3gXIE);FJh|gf?nYuMT_fdk> zj__i^+nvYl)g~%sm(*Bay~%z$YS;0FKu17TWkt_va{c~Ts_7^3wZmwpFR$NRu2L|Z z)6@Lrufm_xZa;MJk}c3EDtrX_mHuStR{pHk)W)jY`&-lVBx5}`KO$>KC&^e{jz}h; zu7HE!$Rz6!8%N8`%>4%_8btl!`?nG^w{7((X%uv|O1Vyij(y8H*qHi5ZniYB+Zd1% zH)wRq(vrm74r0L1OK>Dk&r{E`_q42AoB4_jT1BjjF;m-MY82t{o-R^0P*)@h`q?evW%^5}-kzn-l`&q{$|U?`K*uBZYy)pW zeD0&HulMcHM_7npp7*) zx2`ujZ!0hKPyDrrKm&EWaw*aH%|5C9Olm9C#<+=a&w?+Ps zN%3rd=ixYM^(sp5xy7I&UqRl~%P{UNOtCKvs(7Wus&^ zs>{umd8=5dR$mkKK`$>Jl+egXII0koq=#v7x=VHs`K^G~^bAq%W3S8vy(oTv=KFHC zT)L_$PZF#?KaBB@CUEoSm_s+Tcf077Bt);rho%=8Y(*TWMrE(Wy&(S^+6#&UrPS*o zK@sv1+Go0ZF3px&&$Nduq3VNk7M1d(mN>C1*IpSZ3~zAJ3C-+g?m20&Ww}kmX_+l% zwaKifhxgU6*qDhe)J$PDm6~{eHHDzpLgz`EvmnO^CDEL&<8+-aD%x!*1nA>VE4pU? z(Cb{(Zt!w3BZpYG+x1|GbveWYu%B;%OSjoj0PDk>H(z7rRkkp)hl?YOH8sE9B3l4y zOIEb_K3giYg-07J@Mb%#vdk8CAFP-4@=9epZ{My{oe?${yDt;o>Lt8-y>riHR0YkH~+q;IBraM*ldzD?Jj%DN=3YGayriQ zlrQld*U^v>ats{1HEepHMsBx3b@>%PJGK~Egkx? z^@J>1hqbidf_*8Q*uL0zZV-$i#m9=Ik&GA%u&j}8SLU+adE`Gu3pXt@T%a$AT2OJ7K@=&$ z<>iUtj6ng%_Z)8{cU5)%Wc^p8ZjJAJigqqJcY#v@U4xl^%xd9a^nf0UpT&+WLmgBI z(aGZuPb4lAsS_YoJE_*40stk;*{ckD?39wVjwbzug$VJpo2<0B7@h*;0CUjg@N{Pn z(3(iHy^iUBL`f|P`r)fG>bX>S?6G?M7Q!`9asj02eECwa5ziHFdwQIeqc{_y7Va1n z;gFoUCnE+W`+;NGj^&+P79L6RrBjc)uY^sihlF{hB97Gf6q6oGa(yOR2n)!I@K} zV*CyB(Hs56_pCL&q?>M?Jk2I^zEU031o?#>vrq1jWrEOWtqrknaE~2U#7oH^mm#5uF&5K{jJj9Tl9Ao z{;p8j6)L+zWml-|3YA@eK-h4QPkhGhi}<<&3v>sII& z&<^akLB>1c)RmF`4RK(-;DV#_9;D;UaT+i6B_QEt|82#8tN3r#D0%XVM$@cF%9rDb zrSsBuh{FWvs3w4M1bD(juTIfF*$H)qsibugvkdoVlTI(k?Ab>o2@ElCivhckb4;&) zvEsl)OTi2U=ZSI>`%en5KAk`(v|!XOUs5hhi51oVv`zGTe98BJmt*$-#Zq;y|9NZd z|J6Ic6WQsw_RwjXBUW9-3@5bG8y3bN_U{F^EO*c~PF!Zv-N7DAJu;a%O|Y*!w~OoX zZnEyOX-!8)T3+B-YD|n(y#}3Jlj?PUBFO96b~nVC!?slq_V%9C?>*ewd`$jIx~9>u zi+JG+#PCh%QLkt8TW%e4#Bu%z^D%cu!M3UA0i(*+rcnuImG!bc}}C zaEv~P2R#FJzs@8B%wt8e$FOOC^L^?nX%m~NQK!^`6B(#s7c|*r-vDjWvupqXLTkcy z6ilgDguW)@5Fs)KgHWqFMe!auR_zg1kUqQMsj3qKrP;WcdAxPmj1sEe& zxM>36)i$(Q{7}N0mnnpc%yB&y*YhLV%a#B6%HS5>nXUXk!u~J*URtStmY3dPD|7k( z_2FL?4K5r1l?D8203!E?7mp%X0n0ps6|4XH6bpEeY=JsE&Xa3LU=6wD~ z=YQxr_64l}OQq=iuP)7h*ZLa7>bhpe@_#it|Cg3abN_#D==>k+r)oaG-^BT^9u3cW z|G!j>&Ht78{C_j&|9pDC9rHg4x94nQ-27iENBn=3OU3G3{=bxe=gC{foc%&B2%5^2s;9{;R)n^8dd7fBx2ADnI+t zH-F;Se)He_)a~E>?H~NyALRbk@BY1?{k8x8o$cTMjjw)G|GWDC{-@tL{^kGt&wu~# z|Be6q{9pdHfBRcM`q$aJt)Hy@vmamo zBy8Agv5w(V(75P5S3hs)Y5`UliZ$m){POr+JinN4LvMJ#ALcIDJlQ0|9G8(sk(R`Ge&t;sRq-spnoE{?&D$o;d z-OM0`J5@PLC4ivrBoc^pe^Md{SuLi5J&fm|BYK;0w9FXEJ*GSDF?l4?If(tp?4fuc zqlP3R)6JjPvHlAJnyCZ8aqItbCFcLHI*1Opkn{j38JFwMvF_;jzxo=M68wuW zF0+ZusIx}k_dp%HzghwoV}SQBa)xQdPac8Pj0#r(>#IX_49#NohmJY$=UUzO^E;}W zBO+oC`;G}lAa%0yKA!Y4MiPbA$E!x62RUk(k7BCNk8{~4TeYs$|=KSQNvi{WPr2Q72!dX zqaM8ez+!TLndQtxLqDspGw{&pI8Eb!q53V4+vJ0vO_v44j%&9p@>h~w>_dZ$wXmj)qE!l0$72-?TkpmmOhK(!w?Gbeos4G$K zofF$=ikS=2(-2mwRQ>jo*;F!r`ITUC-!jSlZPx$O3FxKT|CNf>YV7>KxH7;0dj<9X zsV09R1HqVuR4%ZOLVlD>w1LX;Pq2{Sw>lDLod`2jtK#P#y%aZ~%6JqSJU@(_tx{$@ z&if$2!#*20HViXRb1SV2doi_Ps3Vt2G_a#M3kk=SN@>cHZb1bfHH8Czg-)wwS^(K- zA_rx{0O_+>#bo5SAlBN%121V2-0>QDPU?IzU?u>`WTU3`l=1O6Leev5#N~8!KysB* zT{HU;-Ow(B$p`=}h#Mpj_BBv0%fWxy+`&OVrzPW`JI>aVMx5&MnMW*$L>^dO&Tv{1 z)^l;ds9s%z*bo8$%7G1kg`!iBYvL&0#Kj+%PImn|x>EF5Id=)b;@+;uId>IsqCRFa zdmWRtZFH21UIrz)nQ#Eh4nC(!bLb--O=d9iUkz&X;mefHW-_~`NkORM1jMyB2cPqK z6Gm??pUG^sseU`R2P>s!2N5)mH=@J zecQvhLl9T+5=I#28as7a-0X`sOM~tZHcK)ZS|qlYvUK?Qo~NQL#S{LNOISF#OV6CB z<7r0BB2%Gl+vD7S_$QWY7*1ljC;&7Ok~AeI5$992F?=c+A}O?*nY_c9$zc*PjiXiX zjevjR^6`rJn0}GH6r>1s1~M4ObU~^@#YM9_Y+c={5)r2_0##DUGbyS>=n)0Sy56>( zrV0PLFRXzsT|L9^7p6IYe+Guv>|`jSal>}aj33+ha`29Sv9Qd(Jv{6%!#N!GKn!y! zR!ayJi4tjKuLOIo_*QAOI2|mU;mrY5rF7A=F|cs|YXH_9M!eRbu`0eLyRZEdyAr#(KLgYY#r0UJ=4N*$7*)MZ7+_9?~vQaI%_N>%;d%q zT*Pu+i*3Yz2`=hQr3A?MpJz&7v+C5WiE3v3Ixit9H{i}eN`C3diODaL^R<{!{U7#u zrp~|LIhX(Ma;ZG`|NJ`iza0Pg_tNmcQmm{*^}i+b|326Mz6SlT+d*9}>@-mii_t;X zikX39!(O+CO5Y+K)o7U~JKG=atUtnVK;j5SWYV~QXlUqP>1f!}Z5>e~DLq7Nlw-$IgC221u0Ow;pe7K8@#~ zWWSEh-TjAq3Dr=#%(eM=Bc25k<@b%v5BEQc=b&U5kkw{l*r)F*U(R6ow^13<56-T9 zz@cJ)ncck}DUoSgnT*`}zZ-z$OhA&9Fr`eSHGqkq;RtWDWKWe3LVXVyI4fjNMF-Aw zoc21bH_-pgHMWI&0i$buWn$bUekRZ{<;I~8q6w^}J-U#U&x9KxctbO#NIC~Gd?-SH z-wlsR=`j!g75zq?dT84NhF8OwX~0s5hC@<+**EAK&=ITOGG9XduvB(Uwsn7Z4Yp&@ zb={%NB3L5Nm0eiK(i;y;O=pjUx38480q4}O>(}9n$j&1r%N$~~3T7F*#y&H7h+MyK zytBt<&cQBwChQXNR+a^w<|TH46M4*Tw^20@3;M8!swg2*@JxJXxkmT8smP!U*vA%s z1SCA0K}&|?7$;DZB9D2tDAL3262q(QhJVT3vk9Z{570tu2(agZ1aDO2TGLn-ThSq5ApWdk-?+IMYN9zac-vwHs6ueaCsghw#|2 zj?C@}b7}OlUW6K89hR{H2u~#F_3dMS3EVACB<&#{DZdZWmI>o`0sd~&u?8NFomWSM zBMJeyG2SJj;me_o|MKdHL$))aQ7vTU>!P3MCePzzVQm5D_@W%gBSHng+sWf<`dNcf zAx4|t(CCUner3EXILw6wW~~)(GwV+F^qMUA?1SfLkaY7VTU_)*g!=tO82dSYv(|GT z2eNw1;5Q|5NHiHPPEPq1qq&JMj7cD{MRxnPpLzp+3eqhF>85Km>6N08N<490Z9uq0 zuV(9g;$uV9z~Xm7AEFR&06->4E+9U4^K2Vqb01qS;JIrba=i0xLO!6~EbkD_2(e>DHK%>RUjJG{;xahN?9p|MAtoy@W10z(miHW!>KSdRJ7jOZey^g_Kq6W+_ zhmw5(Lwq0Dng~dkmrPW$%0qJus~iCwKIN~m9TR44U$l%^%af%KM#Tz$#w7}7G6L}a z_#&N+j7b3j6-opH0yAll@sa6=o*ep=gZvCHJ0s)uQ5afb89S8{Lui$yRV>^KzMOHA z3>Og%uf?Ip*ctb{5+xG>W)UhrgW|~CZN^(`|D#xakiVKs@c&UMSEBp>YI$kC|GSh& zSoXkX09LWMAr0-$60Y}u?(aMlkxt_ul^~~U8k*3_?T{8S{1YN$yiMtXGPG6Vt*GVK zMwSiAsJ4DQ+_>~Dp!un-i|P5N_-JAw>-Is8!5H)uLAY=O-ed&@%@>7Xc-V?B z_4rw`@P#_i=R%o(-|_6JcrDbZ>KgnjOVwy$6lLT}Dzaaz@zB$rX*g)MEI>^SJB)9z zYu`PCo=TgxFfx3dN=Z`^(L7@!r3#3e9jonS0%|}|Q+ZWy;v4EkxA`d6Xz7Jfr;=Kh zR0OF-QAx5Ebzw&Jh{=SQblWMeKLQ1$rj}FsKvD_!GBR#|a7Ym#>2X5*fY1*xhFvnW z{+@f#*Z4L@V|VY4u1gROAd;)~XN<~VI#1UO}Rha1aP@cx928ya%M5wM*)3YI4 zZ|YRUzC6@_9iRsCRKwLrB;c2>>1SfGDiNy}OboNG5&gJ~V_wWjR>}l>T3#(K6=C{l znRtwCh=G^!gV^IKUxYp^oL3!CaPA&Jf%ho9*cP(b11(ZJ0)rnM2^hdK_pX>J{(9E# z4*M^d#y37S#=RrLqJ!8ayQH9Oa!Fse;n}o(3fDn@nM4(*a#M9pliPA$9idN^^QSCtdd&sW^_yk%ChAoflf+0K$wmN_fGw1@fBzItPx#U3M=4Z4| z;zgOiTN2xUDkS^}F?m^mK4P~C1USFD%J5+u8E!jlEg@)$!!Udlnlcy_o{8uYgHgtz z&7f0%P7|>xG|4#m zrIl__Ln3xl=f~OHFX+YZ|9gYNtlOCW{C~N!GC%)+ZTQb0f&_Kgw;l6R{J)|L*y#Cx zWvM*Z|6Im%W6n|M{9l>>!gO|~H$cbve=b%l(fPkzs?O*C)w%zf!Sp(0T1)lU8oqCT zsgd!J)vOD8LXnz;$xkdsx2LaqSnG80#yy}FzZg{DR z-+9s2cb`1m-q;GVLeM44xR9d~Y zte49A;qHTV?c4x}){;1O9Gc%3#WTq37`MQ`ihk`9(2t`O!)w{5i~hUGe&Lk?AuswB zI^yNBDIfs`^WE6|nLqPq{>-2GGk@mK{Fy)VXa3Be`7?j!&-|G`^Jo5C-RJ)a18(77 I9{@lL0JrvO!2kdN diff --git a/testing/make-archives b/testing/make-archives index ae00d60b6..cb0b0a408 100755 --- a/testing/make-archives +++ b/testing/make-archives @@ -15,11 +15,11 @@ from typing import Sequence REPOS = ( - ('rbenv', 'git://github.com/rbenv/rbenv', '0843745'), - ('ruby-build', 'git://github.com/rbenv/ruby-build', '500863c'), + ('rbenv', 'https://github.com/rbenv/rbenv', '585ed84'), + ('ruby-build', 'https://github.com/rbenv/ruby-build', 'e9fa4bf'), ( 'ruby-download', - 'git://github.com/garnieretienne/rvm-download', + 'https://github.com/garnieretienne/rvm-download', '09bd7c6', ), ) From 229a4e03e3ed531961ca850df6462f19c2a9376d Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 21 May 2021 14:04:43 -0700 Subject: [PATCH 129/129] v2.13.0 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 23 +++++++++++++++++++++++ setup.cfg | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8276e5120..78cbfacd6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.12.1 + rev: v2.13.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 50492dfb4..e47a1c5de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +2.13.0 - 2021-05-21 +=================== + +### Features +- Setting `SKIP=...` skips installation as well. + - #1875 PR by @asottile. + - pre-commit-ci/issues#53 issue by @TylerYep. +- Attempt to mount from host with docker-in-docker. + - #1888 PR by @okainov. + - #1387 issue by @okainov. +- Enable `repo: local` for `r` hooks. + - #1878 PR by @lorenzwalthert. +- Upgrade `ruby-build` and `rbenv`. + - #1913 PR by @jalessio. + +### Fixes +- Better detect `r` packages. + - #1898 PR by @lorenzwalthert. +- Avoid warnings with mismatched `renv` versions. + - #1841 PR by @lorenzwalthert. +- Reproducibly produce ruby tar resources. + - #1915 PR by @asottile. + 2.12.1 - 2021-04-16 =================== diff --git a/setup.cfg b/setup.cfg index 400299870..ae5cc7c2e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.12.1 +version = 2.13.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown

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%0AcDMh%UGT>#`||~+1FOtBlZ%SrXoNM@14%S& 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 BOpgEn From 58a190fd69d43c420195b0de5f16345115d1a071 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 23 Sep 2020 17:44:18 -0700 Subject: [PATCH 026/129] don't pass through -p if using the default version --- pre_commit/languages/python.py | 16 ++++++++-------- tests/languages/python_test.py | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index afa093d56..65f521cdc 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -132,13 +132,11 @@ def _sys_executable_matches(version: str) -> bool: return sys.version_info[:len(info)] == info -def norm_version(version: str) -> str: - if version == C.DEFAULT: - return os.path.realpath(sys.executable) - - # first see if our current executable is appropriate - if _sys_executable_matches(version): - return sys.executable +def norm_version(version: str) -> Optional[str]: + if version == C.DEFAULT: # use virtualenv's default + return None + elif _sys_executable_matches(version): # virtualenv defaults to our exe + return None if os.name == 'nt': # pragma: no cover (windows) version_exec = _find_by_py_launcher(version) @@ -194,8 +192,10 @@ def install_environment( additional_dependencies: Sequence[str], ) -> None: envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) + venv_cmd = [sys.executable, '-mvirtualenv', envdir] python = norm_version(version) - venv_cmd = (sys.executable, '-mvirtualenv', envdir, '-p', python) + if python is not None: + venv_cmd.extend(('-p', python)) install_cmd = ('python', '-mpip', 'install', '.', *additional_dependencies) with clean_path_on_failure(envdir): diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index 29c5a9bf2..cfe14834f 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -36,13 +36,14 @@ def test_norm_version_expanduser(): def test_norm_version_of_default_is_sys_executable(): - assert python.norm_version('default') == os.path.realpath(sys.executable) + assert python.norm_version('default') is None @pytest.mark.parametrize('v', ('python3.6', 'python3', 'python')) def test_sys_executable_matches(v): with mock.patch.object(sys, 'version_info', (3, 6, 7)): assert python._sys_executable_matches(v) + assert python.norm_version(v) is None @pytest.mark.parametrize('v', ('notpython', 'python3.x')) From 3de3c6a5fcaa0eb2a63123a343e3ec44da199b1e Mon Sep 17 00:00:00 2001 From: Maximilian Cosmo Sitter <48606431+mcsitter@users.noreply.github.com> Date: Wed, 23 Sep 2020 02:20:11 +0200 Subject: [PATCH 027/129] Update pre-commit version in sample config --- pre_commit/commands/sample_config.py | 2 +- tests/commands/sample_config_test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/sample_config.py b/pre_commit/commands/sample_config.py index d435faa8c..64617c333 100644 --- a/pre_commit/commands/sample_config.py +++ b/pre_commit/commands/sample_config.py @@ -7,7 +7,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.4.0 + rev: v3.2.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer diff --git a/tests/commands/sample_config_test.py b/tests/commands/sample_config_test.py index 11c087649..8e3a9043f 100644 --- a/tests/commands/sample_config_test.py +++ b/tests/commands/sample_config_test.py @@ -10,7 +10,7 @@ def test_sample_config(capsys): # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.4.0 + rev: v3.2.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer From 003e4c21e00323462fd26d9393f8af10a2e1cbe8 Mon Sep 17 00:00:00 2001 From: Ruairidh MacLeod Date: Thu, 10 Sep 2020 11:36:10 +0000 Subject: [PATCH 028/129] add initial dotnet support --- .gitignore | 1 + pre_commit/languages/all.py | 2 + pre_commit/languages/dotnet.py | 90 +++++++++++++++++++ testing/gen-languages-all | 5 +- .../dotnet_hooks_csproj_repo/.gitignore | 3 + .../.pre-commit-hooks.yaml | 5 ++ .../dotnet_hooks_csproj_repo/Program.cs | 12 +++ .../dotnet_hooks_csproj_repo.csproj | 9 ++ .../dotnet_hooks_sln_repo/.gitignore | 3 + .../.pre-commit-hooks.yaml | 5 ++ .../dotnet_hooks_sln_repo/Program.cs | 12 +++ .../dotnet_hooks_sln_repo.csproj | 9 ++ .../dotnet_hooks_sln_repo.sln | 34 +++++++ tests/languages/dotnet_test.py | 0 tests/repository_test.py | 14 +++ tox.ini | 2 +- 16 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 pre_commit/languages/dotnet.py create mode 100644 testing/resources/dotnet_hooks_csproj_repo/.gitignore create mode 100644 testing/resources/dotnet_hooks_csproj_repo/.pre-commit-hooks.yaml create mode 100644 testing/resources/dotnet_hooks_csproj_repo/Program.cs create mode 100644 testing/resources/dotnet_hooks_csproj_repo/dotnet_hooks_csproj_repo.csproj create mode 100644 testing/resources/dotnet_hooks_sln_repo/.gitignore create mode 100644 testing/resources/dotnet_hooks_sln_repo/.pre-commit-hooks.yaml create mode 100644 testing/resources/dotnet_hooks_sln_repo/Program.cs create mode 100644 testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.csproj create mode 100644 testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.sln create mode 100644 tests/languages/dotnet_test.py diff --git a/.gitignore b/.gitignore index 5428b0ad8..4f4f6b941 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /.tox /dist /venv* +.vscode/ diff --git a/pre_commit/languages/all.py b/pre_commit/languages/all.py index 5609631b0..f32780c14 100644 --- a/pre_commit/languages/all.py +++ b/pre_commit/languages/all.py @@ -8,6 +8,7 @@ from pre_commit.languages import conda from pre_commit.languages import docker from pre_commit.languages import docker_image +from pre_commit.languages import dotnet from pre_commit.languages import fail from pre_commit.languages import golang from pre_commit.languages import node @@ -42,6 +43,7 @@ class Language(NamedTuple): 'conda': Language(name='conda', ENVIRONMENT_DIR=conda.ENVIRONMENT_DIR, get_default_version=conda.get_default_version, healthy=conda.healthy, install_environment=conda.install_environment, run_hook=conda.run_hook), # noqa: E501 'docker': Language(name='docker', ENVIRONMENT_DIR=docker.ENVIRONMENT_DIR, get_default_version=docker.get_default_version, healthy=docker.healthy, install_environment=docker.install_environment, run_hook=docker.run_hook), # noqa: E501 'docker_image': Language(name='docker_image', ENVIRONMENT_DIR=docker_image.ENVIRONMENT_DIR, get_default_version=docker_image.get_default_version, healthy=docker_image.healthy, install_environment=docker_image.install_environment, run_hook=docker_image.run_hook), # noqa: E501 + 'dotnet': Language(name='dotnet', ENVIRONMENT_DIR=dotnet.ENVIRONMENT_DIR, get_default_version=dotnet.get_default_version, healthy=dotnet.healthy, install_environment=dotnet.install_environment, run_hook=dotnet.run_hook), # noqa: E501 'fail': Language(name='fail', ENVIRONMENT_DIR=fail.ENVIRONMENT_DIR, get_default_version=fail.get_default_version, healthy=fail.healthy, install_environment=fail.install_environment, run_hook=fail.run_hook), # noqa: E501 'golang': Language(name='golang', ENVIRONMENT_DIR=golang.ENVIRONMENT_DIR, get_default_version=golang.get_default_version, healthy=golang.healthy, install_environment=golang.install_environment, run_hook=golang.run_hook), # noqa: E501 'node': Language(name='node', ENVIRONMENT_DIR=node.ENVIRONMENT_DIR, get_default_version=node.get_default_version, healthy=node.healthy, install_environment=node.install_environment, run_hook=node.run_hook), # noqa: E501 diff --git a/pre_commit/languages/dotnet.py b/pre_commit/languages/dotnet.py new file mode 100644 index 000000000..a8abc8611 --- /dev/null +++ b/pre_commit/languages/dotnet.py @@ -0,0 +1,90 @@ +import contextlib +import os.path +from typing import Generator +from typing import Sequence +from typing import Tuple + +import pre_commit.constants as C +from pre_commit.envcontext import envcontext +from pre_commit.envcontext import PatchesT +from pre_commit.envcontext import Var +from pre_commit.hook import Hook +from pre_commit.languages import helpers +from pre_commit.prefix import Prefix +from pre_commit.util import clean_path_on_failure +from pre_commit.util import rmtree + +ENVIRONMENT_DIR = 'dotnetenv' +BIN_DIR = 'bin' + +get_default_version = helpers.basic_get_default_version +healthy = helpers.basic_healthy + + +def get_env_patch(venv: str) -> PatchesT: + return ( + ('PATH', (os.path.join(venv, BIN_DIR), os.pathsep, Var('PATH'))), + ) + + +@contextlib.contextmanager +def in_env(prefix: Prefix) -> Generator[None, None, None]: + directory = helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT) + envdir = prefix.path(directory) + with envcontext(get_env_patch(envdir)): + yield + + +def install_environment( + prefix: Prefix, + version: str, + additional_dependencies: Sequence[str], +) -> None: + helpers.assert_version_default('dotnet', version) + helpers.assert_no_additional_deps('dotnet', additional_dependencies) + + envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) + with clean_path_on_failure(envdir): + build_dir = 'pre-commit-build' + + # Build & pack nupkg file + helpers.run_setup_cmd( + prefix, + ( + 'dotnet', 'pack', + '--configuration', 'Release', + '--output', build_dir, + ), + ) + + # Determine tool from the packaged file ..nupkg + build_outputs = os.listdir(os.path.join(prefix.prefix_dir, build_dir)) + if len(build_outputs) != 1: + raise NotImplementedError( + f"Can't handle multiple build outputs. Got {build_outputs}", + ) + tool_name = build_outputs[0].split('.')[0] + + # Install to bin dir + helpers.run_setup_cmd( + prefix, + ( + 'dotnet', 'tool', 'install', + '--tool-path', os.path.join(envdir, BIN_DIR), + '--add-source', build_dir, + tool_name, + ), + ) + + # Cleanup build output + for d in ('bin', 'obj', build_dir): + rmtree(prefix.path(d)) + + +def run_hook( + hook: Hook, + file_args: Sequence[str], + color: bool, +) -> Tuple[int, bytes]: + with in_env(hook.prefix): + return helpers.run_xargs(hook, hook.cmd, file_args, color=color) diff --git a/testing/gen-languages-all b/testing/gen-languages-all index 2bff7beb0..35eac042b 100755 --- a/testing/gen-languages-all +++ b/testing/gen-languages-all @@ -2,8 +2,9 @@ import sys LANGUAGES = [ - 'conda', 'docker', 'docker_image', 'fail', 'golang', 'node', 'perl', - 'pygrep', 'python', 'ruby', 'rust', 'script', 'swift', 'system', + 'conda', 'docker', 'dotnet', 'docker_image', 'fail', 'golang', + 'node', 'perl', 'pygrep', 'python', 'ruby', 'rust', 'script', 'swift', + 'system', ] FIELDS = [ 'ENVIRONMENT_DIR', 'get_default_version', 'healthy', 'install_environment', diff --git a/testing/resources/dotnet_hooks_csproj_repo/.gitignore b/testing/resources/dotnet_hooks_csproj_repo/.gitignore new file mode 100644 index 000000000..edcd28f4a --- /dev/null +++ b/testing/resources/dotnet_hooks_csproj_repo/.gitignore @@ -0,0 +1,3 @@ +bin/ +obj/ +nupkg/ diff --git a/testing/resources/dotnet_hooks_csproj_repo/.pre-commit-hooks.yaml b/testing/resources/dotnet_hooks_csproj_repo/.pre-commit-hooks.yaml new file mode 100644 index 000000000..d005a74cc --- /dev/null +++ b/testing/resources/dotnet_hooks_csproj_repo/.pre-commit-hooks.yaml @@ -0,0 +1,5 @@ +- id: dotnet example hook + name: dotnet example hook + entry: testeroni + language: dotnet + files: '' diff --git a/testing/resources/dotnet_hooks_csproj_repo/Program.cs b/testing/resources/dotnet_hooks_csproj_repo/Program.cs new file mode 100644 index 000000000..1456e8ef2 --- /dev/null +++ b/testing/resources/dotnet_hooks_csproj_repo/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace dotnet_hooks_repo +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello from dotnet!"); + } + } +} diff --git a/testing/resources/dotnet_hooks_csproj_repo/dotnet_hooks_csproj_repo.csproj b/testing/resources/dotnet_hooks_csproj_repo/dotnet_hooks_csproj_repo.csproj new file mode 100644 index 000000000..d2e556ac0 --- /dev/null +++ b/testing/resources/dotnet_hooks_csproj_repo/dotnet_hooks_csproj_repo.csproj @@ -0,0 +1,9 @@ + + + Exe + netcoreapp3.1 + true + testeroni + ./nupkg + + diff --git a/testing/resources/dotnet_hooks_sln_repo/.gitignore b/testing/resources/dotnet_hooks_sln_repo/.gitignore new file mode 100644 index 000000000..edcd28f4a --- /dev/null +++ b/testing/resources/dotnet_hooks_sln_repo/.gitignore @@ -0,0 +1,3 @@ +bin/ +obj/ +nupkg/ diff --git a/testing/resources/dotnet_hooks_sln_repo/.pre-commit-hooks.yaml b/testing/resources/dotnet_hooks_sln_repo/.pre-commit-hooks.yaml new file mode 100644 index 000000000..d005a74cc --- /dev/null +++ b/testing/resources/dotnet_hooks_sln_repo/.pre-commit-hooks.yaml @@ -0,0 +1,5 @@ +- id: dotnet example hook + name: dotnet example hook + entry: testeroni + language: dotnet + files: '' diff --git a/testing/resources/dotnet_hooks_sln_repo/Program.cs b/testing/resources/dotnet_hooks_sln_repo/Program.cs new file mode 100644 index 000000000..04ad4e0cc --- /dev/null +++ b/testing/resources/dotnet_hooks_sln_repo/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace dotnet_hooks_sln_repo +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello from dotnet!"); + } + } +} diff --git a/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.csproj b/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.csproj new file mode 100644 index 000000000..e37296480 --- /dev/null +++ b/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.csproj @@ -0,0 +1,9 @@ + + + Exe + netcoreapp3.1 + true + testeroni + ./nupkg + + diff --git a/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.sln b/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.sln new file mode 100644 index 000000000..87d2afbaf --- /dev/null +++ b/testing/resources/dotnet_hooks_sln_repo/dotnet_hooks_sln_repo.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet_hooks_sln_repo", "dotnet_hooks_sln_repo.csproj", "{6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|x64.ActiveCfg = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|x64.Build.0 = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|x86.ActiveCfg = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Debug|x86.Build.0 = Debug|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|Any CPU.Build.0 = Release|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|x64.ActiveCfg = Release|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|x64.Build.0 = Release|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|x86.ActiveCfg = Release|Any CPU + {6568CFDB-6F6F-45A9-932C-8C7DAABC8E56}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tests/languages/dotnet_test.py b/tests/languages/dotnet_test.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/repository_test.py b/tests/repository_test.py index 035b02a65..3f7a39fbf 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -917,3 +917,17 @@ def test_local_perl_additional_dependencies(store): ret, out = _hook_run(hook, (), color=False) assert ret == 0 assert _norm_out(out).startswith(b'This is perltidy, v20200110') + + +@pytest.mark.parametrize( + 'repo', + ( + 'dotnet_hooks_csproj_repo', + 'dotnet_hooks_sln_repo', + ), +) +def test_dotnet_hook(tempdir_factory, store, repo): + _test_hook_repo( + tempdir_factory, store, repo, + 'dotnet example hook', [], b'Hello from dotnet!\n', + ) diff --git a/tox.ini b/tox.ini index 63a3aab81..11b20d418 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ envlist = py36,py37,py38,pypy3,pre-commit [testenv] deps = -rrequirements-dev.txt -passenv = HOME LOCALAPPDATA RUSTUP_HOME +passenv = APPDATA HOME LOCALAPPDATA PROGRAMFILES RUSTUP_HOME commands = coverage erase coverage run -m pytest {posargs:tests} From bc198b89ca9a991dd1a09670c3ed823872b232aa Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 23 Sep 2020 15:35:41 -0700 Subject: [PATCH 029/129] add zipapp support --- testing/zipapp/Dockerfile | 14 +++++++ testing/zipapp/entry | 66 +++++++++++++++++++++++++++++ testing/zipapp/fakepython | 45 ++++++++++++++++++++ testing/zipapp/make | 88 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 testing/zipapp/Dockerfile create mode 100755 testing/zipapp/entry create mode 100755 testing/zipapp/fakepython create mode 100755 testing/zipapp/make diff --git a/testing/zipapp/Dockerfile b/testing/zipapp/Dockerfile new file mode 100644 index 000000000..e21d5fe31 --- /dev/null +++ b/testing/zipapp/Dockerfile @@ -0,0 +1,14 @@ +FROM ubuntu:bionic +RUN : \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + python3 \ + python3-distutils \ + python3-venv \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +ENV LANG=C.UTF-8 PATH=/venv/bin:$PATH +RUN : \ + && python3.6 -mvenv /venv \ + && pip install --no-cache-dir pip setuptools wheel no-manylinux --upgrade diff --git a/testing/zipapp/entry b/testing/zipapp/entry new file mode 100755 index 000000000..73a984d49 --- /dev/null +++ b/testing/zipapp/entry @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +import os.path +import shutil +import stat +import sys +import tempfile +import zipfile + +from pre_commit.file_lock import lock + +CACHE_DIR = os.path.expanduser('~/.cache/pre-commit-zipapp') + + +def _make_executable(filename: str) -> None: + os.chmod(filename, os.stat(filename).st_mode | stat.S_IXUSR) + + +def _ensure_cache(zipf: zipfile.ZipFile, cache_key: str) -> str: + os.makedirs(CACHE_DIR, exist_ok=True) + + cache_dest = os.path.join(CACHE_DIR, cache_key) + lock_filename = os.path.join(CACHE_DIR, f'{cache_key}.lock') + + if os.path.exists(cache_dest): + return cache_dest + + with lock(lock_filename, blocked_cb=lambda: None): + # another process may have completed this work + if os.path.exists(cache_dest): + return cache_dest + + tmpdir = tempfile.mkdtemp(prefix=os.path.join(CACHE_DIR, '')) + try: + zipf.extractall(tmpdir) + # zip doesn't maintain permissions + _make_executable(os.path.join(tmpdir, 'fakepython')) + os.rename(tmpdir, cache_dest) + except BaseException: + shutil.rmtree(tmpdir) + raise + + return cache_dest + + +def main() -> int: + with zipfile.ZipFile(os.path.dirname(__file__)) as zipf: + with zipf.open('CACHE_KEY') as f: + cache_key = f.read().decode().strip() + + cache_dest = _ensure_cache(zipf, cache_key) + + fakepython = os.path.join(cache_dest, 'fakepython') + cmd = (sys.executable, fakepython, '-mpre_commit', *sys.argv[1:]) + if sys.platform == 'win32': # https://bugs.python.org/issue19124 + import subprocess + + if sys.version_info < (3, 7): # https://bugs.python.org/issue25942 + return subprocess.Popen(cmd).wait() + else: + return subprocess.call(cmd) + else: + os.execvp(cmd[0], cmd) + + +if __name__ == '__main__': + exit(main()) diff --git a/testing/zipapp/fakepython b/testing/zipapp/fakepython new file mode 100755 index 000000000..e437d1df5 --- /dev/null +++ b/testing/zipapp/fakepython @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""A shim executable to put dependencies on sys.path""" +import argparse +import os.path +import runpy +import sys + +HERE = os.path.dirname(os.path.realpath(__file__)) +WHEELDIR = os.path.join(HERE, 'wheels') +SITE_DIRS = frozenset(('dist-packages', 'site-packages')) + + +def main() -> int: + parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('-m') + args, rest = parser.parse_known_args() + + if args.m: + # try and remove site-packages from sys.path so our packages win + sys.path[:] = [ + p for p in sys.path + if os.path.split(p)[1] not in SITE_DIRS + ] + for wheel in sorted(os.listdir(WHEELDIR)): + sys.path.append(os.path.join(WHEELDIR, wheel)) + if args.m == 'pre_commit' or args.m.startswith('pre_commit.'): + sys.executable = os.path.abspath(__file__) + sys.argv[1:] = rest + runpy.run_module(args.m, run_name='__main__', alter_sys=True) + return 0 + else: + cmd = (sys.executable, *sys.argv[1:]) + if sys.platform == 'win32': # https://bugs.python.org/issue19124 + import subprocess + + if sys.version_info < (3, 7): # https://bugs.python.org/issue25942 + return subprocess.Popen(cmd).wait() + else: + return subprocess.call(cmd) + else: + os.execvp(cmd[0], cmd) + + +if __name__ == '__main__': + exit(main()) diff --git a/testing/zipapp/make b/testing/zipapp/make new file mode 100755 index 000000000..752768de6 --- /dev/null +++ b/testing/zipapp/make @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +import argparse +import base64 +import hashlib +import os.path +import shutil +import subprocess +import tempfile +import zipapp +import zipfile + +HERE = os.path.dirname(os.path.realpath(__file__)) +IMG = 'make-pre-commit-zipapp' + + +def _msg(s: str) -> None: + print(f'\033[7m{s}\033[m') + + +def _exit_if_retv(*cmd: str) -> None: + if subprocess.call(cmd): + raise SystemExit(1) + + +def _check_no_shared_objects(wheeldir: str) -> None: + for zip_filename in os.listdir(wheeldir): + with zipfile.ZipFile(os.path.join(wheeldir, zip_filename)) as zipf: + for filename in zipf.namelist(): + if filename.endswith('.so') or '.so.' in filename: + raise AssertionError(zip_filename, filename) + + +def _write_cache_key(version: str, wheeldir: str, dest: str) -> None: + cache_hash = hashlib.sha256(f'{version}\n'.encode()) + for filename in sorted(os.listdir(wheeldir)): + cache_hash.update(f'{filename}\n'.encode()) + with open(os.path.join(HERE, 'fakepython'), 'rb') as f: + cache_hash.update(f.read()) + with open(os.path.join(dest, 'CACHE_KEY'), 'wb') as f: + f.write(base64.urlsafe_b64encode(cache_hash.digest()).rstrip(b'=')) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument('version') + args = parser.parse_args() + + with tempfile.TemporaryDirectory() as tmpdir: + wheeldir = os.path.join(tmpdir, 'wheels') + os.mkdir(wheeldir) + + _msg('building podman image...') + _exit_if_retv('podman', 'build', '-q', '-t', IMG, HERE) + + _msg('populating wheels...') + _exit_if_retv( + 'podman', 'run', '--rm', '--volume', f'{wheeldir}:/wheels:rw', IMG, + 'pip', 'wheel', f'pre_commit=={args.version}', + '--wheel-dir', '/wheels', + ) + + _msg('validating wheels...') + _check_no_shared_objects(wheeldir) + + _msg('adding fakepython / __main__.py...') + shutil.copy(os.path.join(HERE, 'fakepython'), tmpdir) + mainfile = os.path.join(tmpdir, '__main__.py') + shutil.copy(os.path.join(HERE, 'entry'), mainfile) + + _msg('copying file_lock.py...') + file_lock_py = os.path.join(HERE, '../../pre_commit/file_lock.py') + file_lock_py_dest = os.path.join(tmpdir, 'pre_commit/file_lock.py') + os.makedirs(os.path.dirname(file_lock_py_dest)) + shutil.copy(file_lock_py, file_lock_py_dest) + + _msg('writing CACHE_KEY...') + _write_cache_key(args.version, wheeldir, tmpdir) + + filename = f'pre-commit-{args.version}.pyz' + _msg(f'writing {filename}...') + shebang = '/usr/bin/env python3' + zipapp.create_archive(tmpdir, filename, interpreter=shebang) + + return 0 + + +if __name__ == '__main__': + exit(main()) From fbd529204bac42c922094552578c79788a26ebe7 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 28 Sep 2020 18:37:10 -0700 Subject: [PATCH 030/129] make an exe stub for windows --- requirements-dev.txt | 1 + testing/zipapp/entry | 11 ++++++++--- testing/zipapp/make | 24 +++++++++++++++++++++--- testing/zipapp/{fakepython => python} | 7 +++++-- 4 files changed, 35 insertions(+), 8 deletions(-) rename testing/zipapp/{fakepython => python} (85%) diff --git a/requirements-dev.txt b/requirements-dev.txt index 14ada96ed..56afd41f5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,6 @@ covdefaults coverage +distlib pytest pytest-env re-assert diff --git a/testing/zipapp/entry b/testing/zipapp/entry index 73a984d49..f0a345e6a 100755 --- a/testing/zipapp/entry +++ b/testing/zipapp/entry @@ -33,7 +33,8 @@ def _ensure_cache(zipf: zipfile.ZipFile, cache_key: str) -> str: try: zipf.extractall(tmpdir) # zip doesn't maintain permissions - _make_executable(os.path.join(tmpdir, 'fakepython')) + _make_executable(os.path.join(tmpdir, 'python')) + _make_executable(os.path.join(tmpdir, 'python.exe')) os.rename(tmpdir, cache_dest) except BaseException: shutil.rmtree(tmpdir) @@ -49,8 +50,12 @@ def main() -> int: cache_dest = _ensure_cache(zipf, cache_key) - fakepython = os.path.join(cache_dest, 'fakepython') - cmd = (sys.executable, fakepython, '-mpre_commit', *sys.argv[1:]) + if sys.platform != 'win32': + exe = os.path.join(cache_dest, 'python') + else: + exe = os.path.join(cache_dest, 'python.exe') + + cmd = (exe, '-mpre_commit', *sys.argv[1:]) if sys.platform == 'win32': # https://bugs.python.org/issue19124 import subprocess diff --git a/testing/zipapp/make b/testing/zipapp/make index 752768de6..a644946d5 100755 --- a/testing/zipapp/make +++ b/testing/zipapp/make @@ -2,6 +2,8 @@ import argparse import base64 import hashlib +import importlib.resources +import io import os.path import shutil import subprocess @@ -30,11 +32,25 @@ def _check_no_shared_objects(wheeldir: str) -> None: raise AssertionError(zip_filename, filename) +def _add_shim(dest: str) -> None: + shim = os.path.join(HERE, 'python') + shutil.copy(shim, dest) + + bio = io.BytesIO() + with zipfile.ZipFile(bio, 'w') as zipf: + zipf.write(shim, arcname='__main__.py') + + with open(os.path.join(dest, 'python.exe'), 'wb') as f: + f.write(importlib.resources.read_binary('distlib', 't32.exe')) + f.write(b'#!py.exe -3\n') + f.write(bio.getvalue()) + + def _write_cache_key(version: str, wheeldir: str, dest: str) -> None: cache_hash = hashlib.sha256(f'{version}\n'.encode()) for filename in sorted(os.listdir(wheeldir)): cache_hash.update(f'{filename}\n'.encode()) - with open(os.path.join(HERE, 'fakepython'), 'rb') as f: + with open(os.path.join(HERE, 'python'), 'rb') as f: cache_hash.update(f.read()) with open(os.path.join(dest, 'CACHE_KEY'), 'wb') as f: f.write(base64.urlsafe_b64encode(cache_hash.digest()).rstrip(b'=')) @@ -62,11 +78,13 @@ def main() -> int: _msg('validating wheels...') _check_no_shared_objects(wheeldir) - _msg('adding fakepython / __main__.py...') - shutil.copy(os.path.join(HERE, 'fakepython'), tmpdir) + _msg('adding __main__.py...') mainfile = os.path.join(tmpdir, '__main__.py') shutil.copy(os.path.join(HERE, 'entry'), mainfile) + _msg('adding shim...') + _add_shim(tmpdir) + _msg('copying file_lock.py...') file_lock_py = os.path.join(HERE, '../../pre_commit/file_lock.py') file_lock_py_dest = os.path.join(tmpdir, 'pre_commit/file_lock.py') diff --git a/testing/zipapp/fakepython b/testing/zipapp/python similarity index 85% rename from testing/zipapp/fakepython rename to testing/zipapp/python index e437d1df5..97c5928e3 100755 --- a/testing/zipapp/fakepython +++ b/testing/zipapp/python @@ -5,7 +5,10 @@ import os.path import runpy import sys -HERE = os.path.dirname(os.path.realpath(__file__)) +# an exe-zipapp will have a __file__ of shim.exe/__main__.py +EXE = __file__ if os.path.isfile(__file__) else os.path.dirname(__file__) +EXE = os.path.realpath(EXE) +HERE = os.path.dirname(EXE) WHEELDIR = os.path.join(HERE, 'wheels') SITE_DIRS = frozenset(('dist-packages', 'site-packages')) @@ -24,7 +27,7 @@ def main() -> int: for wheel in sorted(os.listdir(WHEELDIR)): sys.path.append(os.path.join(WHEELDIR, wheel)) if args.m == 'pre_commit' or args.m.startswith('pre_commit.'): - sys.executable = os.path.abspath(__file__) + sys.executable = EXE sys.argv[1:] = rest runpy.run_module(args.m, run_name='__main__', alter_sys=True) return 0 From 32a286d5300a84bc8fcbcc87f4d88171f9701354 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 10 Oct 2020 16:39:10 -0700 Subject: [PATCH 031/129] use implementation-agnostic conda package for test --- tests/repository_test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/repository_test.py b/tests/repository_test.py index 3f7a39fbf..a6d801ec1 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -94,8 +94,8 @@ def test_conda_with_additional_dependencies_hook(tempdir_factory, store): config_kwargs={ 'hooks': [{ 'id': 'additional-deps', - 'args': ['-c', 'import mccabe; print("OK")'], - 'additional_dependencies': ['mccabe'], + 'args': ['-c', 'import tzdata; print("OK")'], + 'additional_dependencies': ['python-tzdata'], }], }, ) @@ -109,8 +109,8 @@ def test_local_conda_additional_dependencies(store): 'name': 'local-conda', 'entry': 'python', 'language': 'conda', - 'args': ['-c', 'import mccabe; print("OK")'], - 'additional_dependencies': ['mccabe'], + 'args': ['-c', 'import tzdata; print("OK")'], + 'additional_dependencies': ['python-tzdata'], }], } hook = _get_hook(config, store, 'local-conda') From 3584b99caac8cc7320cb7fd0fb23fff8f04d0281 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 9 Oct 2020 11:31:12 -0700 Subject: [PATCH 032/129] simplify docker run --- pre_commit/languages/docker.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index 9c1311988..9d30568c5 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -87,9 +87,8 @@ def run_hook( # automated cleanup of docker images. build_docker_image(hook.prefix, pull=False) - hook_cmd = hook.cmd - entry_exe, cmd_rest = hook.cmd[0], hook_cmd[1:] + entry_exe, *cmd_rest = hook.cmd entry_tag = ('--entrypoint', entry_exe, docker_tag(hook.prefix)) - cmd = docker_cmd() + entry_tag + cmd_rest + cmd = (*docker_cmd(), *entry_tag, *cmd_rest) return helpers.run_xargs(hook, cmd, file_args, color=color) From 2fc676709d1caf2488296b915104530439f8a190 Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Wed, 14 Oct 2020 18:15:22 +0100 Subject: [PATCH 033/129] Remove unnecessary fixtures in signatures from pygrep tests --- tests/languages/pygrep_test.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/languages/pygrep_test.py b/tests/languages/pygrep_test.py index cabea22ec..6eef56b7a 100644 --- a/tests/languages/pygrep_test.py +++ b/tests/languages/pygrep_test.py @@ -23,42 +23,47 @@ def some_files(tmpdir): ("h'q", 1, "f3:1:with'quotes\n"), ), ) -def test_main(some_files, cap_out, pattern, expected_retcode, expected_out): +def test_main(cap_out, pattern, expected_retcode, expected_out): ret = pygrep.main((pattern, 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == expected_retcode assert out == expected_out -def test_ignore_case(some_files, cap_out): +@pytest.mark.usefixtures('some_files') +def test_ignore_case(cap_out): ret = pygrep.main(('--ignore-case', 'info', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 assert out == 'f2:1:[INFO] hi\n' -def test_multiline(some_files, cap_out): +@pytest.mark.usefixtures('some_files') +def test_multiline(cap_out): ret = pygrep.main(('--multiline', r'foo\nbar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 assert out == 'f1:1:foo\nbar\n' -def test_multiline_line_number(some_files, cap_out): +@pytest.mark.usefixtures('some_files') +def test_multiline_line_number(cap_out): ret = pygrep.main(('--multiline', r'ar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 assert out == 'f1:2:bar\n' -def test_multiline_dotall_flag_is_enabled(some_files, cap_out): +@pytest.mark.usefixtures('some_files') +def test_multiline_dotall_flag_is_enabled(cap_out): ret = pygrep.main(('--multiline', r'o.*bar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 assert out == 'f1:1:foo\nbar\n' -def test_multiline_multiline_flag_is_enabled(some_files, cap_out): +@pytest.mark.usefixtures('some_files') +def test_multiline_multiline_flag_is_enabled(cap_out): ret = pygrep.main(('--multiline', r'foo$.*bar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 From a0658c06bf4cc93ae1af40182c05234c1ba310b2 Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Sat, 17 Oct 2020 14:21:12 +0100 Subject: [PATCH 034/129] add --negate flag to pygrep --- pre_commit/languages/pygrep.py | 48 ++++++++++++++++++++++++++--- tests/languages/pygrep_test.py | 55 ++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/pre_commit/languages/pygrep.py b/pre_commit/languages/pygrep.py index 40adba0f7..c80d6794b 100644 --- a/pre_commit/languages/pygrep.py +++ b/pre_commit/languages/pygrep.py @@ -1,6 +1,7 @@ import argparse import re import sys +from typing import NamedTuple from typing import Optional from typing import Pattern from typing import Sequence @@ -45,6 +46,46 @@ def _process_filename_at_once(pattern: Pattern[bytes], filename: str) -> int: return retv +def _process_filename_by_line_negated( + pattern: Pattern[bytes], + filename: str, +) -> int: + with open(filename, 'rb') as f: + for line in f: + if pattern.search(line): + return 0 + else: + output.write_line(filename) + return 1 + + +def _process_filename_at_once_negated( + pattern: Pattern[bytes], + filename: str, +) -> int: + with open(filename, 'rb') as f: + contents = f.read() + match = pattern.search(contents) + if match: + return 0 + else: + output.write_line(filename) + return 1 + + +class Choice(NamedTuple): + multiline: bool + negate: bool + + +FNS = { + Choice(multiline=True, negate=True): _process_filename_at_once_negated, + Choice(multiline=True, negate=False): _process_filename_at_once, + Choice(multiline=False, negate=True): _process_filename_by_line_negated, + Choice(multiline=False, negate=False): _process_filename_by_line, +} + + def run_hook( hook: Hook, file_args: Sequence[str], @@ -64,6 +105,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int: ) parser.add_argument('-i', '--ignore-case', action='store_true') parser.add_argument('--multiline', action='store_true') + parser.add_argument('--negate', action='store_true') parser.add_argument('pattern', help='python regex pattern.') parser.add_argument('filenames', nargs='*') args = parser.parse_args(argv) @@ -75,11 +117,9 @@ def main(argv: Optional[Sequence[str]] = None) -> int: pattern = re.compile(args.pattern.encode(), flags) retv = 0 + process_fn = FNS[Choice(multiline=args.multiline, negate=args.negate)] for filename in args.filenames: - if args.multiline: - retv |= _process_filename_at_once(pattern, filename) - else: - retv |= _process_filename_by_line(pattern, filename) + retv |= process_fn(pattern, filename) return retv diff --git a/tests/languages/pygrep_test.py b/tests/languages/pygrep_test.py index 6eef56b7a..d8bacc484 100644 --- a/tests/languages/pygrep_test.py +++ b/tests/languages/pygrep_test.py @@ -8,6 +8,9 @@ def some_files(tmpdir): tmpdir.join('f1').write_binary(b'foo\nbar\n') tmpdir.join('f2').write_binary(b'[INFO] hi\n') tmpdir.join('f3').write_binary(b"with'quotes\n") + tmpdir.join('f4').write_binary(b'foo\npattern\nbar\n') + tmpdir.join('f5').write_binary(b'[INFO] hi\npattern\nbar') + tmpdir.join('f6').write_binary(b"pattern\nbarwith'foo\n") with tmpdir.as_cwd(): yield @@ -30,6 +33,58 @@ def test_main(cap_out, pattern, expected_retcode, expected_out): assert out == expected_out +@pytest.mark.usefixtures('some_files') +def test_negate_by_line_no_match(cap_out): + ret = pygrep.main(('pattern\nbar', 'f4', 'f5', 'f6', '--negate')) + out = cap_out.get() + assert ret == 1 + assert out == 'f4\nf5\nf6\n' + + +@pytest.mark.usefixtures('some_files') +def test_negate_by_line_two_match(cap_out): + ret = pygrep.main(('foo', 'f4', 'f5', 'f6', '--negate')) + out = cap_out.get() + assert ret == 1 + assert out == 'f5\n' + + +@pytest.mark.usefixtures('some_files') +def test_negate_by_line_all_match(cap_out): + ret = pygrep.main(('pattern', 'f4', 'f5', 'f6', '--negate')) + out = cap_out.get() + assert ret == 0 + assert out == '' + + +@pytest.mark.usefixtures('some_files') +def test_negate_by_file_no_match(cap_out): + ret = pygrep.main(('baz', 'f4', 'f5', 'f6', '--negate', '--multiline')) + out = cap_out.get() + assert ret == 1 + assert out == 'f4\nf5\nf6\n' + + +@pytest.mark.usefixtures('some_files') +def test_negate_by_file_one_match(cap_out): + ret = pygrep.main( + ('foo\npattern', 'f4', 'f5', 'f6', '--negate', '--multiline'), + ) + out = cap_out.get() + assert ret == 1 + assert out == 'f5\nf6\n' + + +@pytest.mark.usefixtures('some_files') +def test_negate_by_file_all_match(cap_out): + ret = pygrep.main( + ('pattern\nbar', 'f4', 'f5', 'f6', '--negate', '--multiline'), + ) + out = cap_out.get() + assert ret == 0 + assert out == '' + + @pytest.mark.usefixtures('some_files') def test_ignore_case(cap_out): ret = pygrep.main(('--ignore-case', 'info', 'f1', 'f2', 'f3')) From 653cdd286be27b5c7eca6cae7204753892cabdef Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 26 Oct 2020 16:11:27 -0700 Subject: [PATCH 035/129] Add pre-commit.ci --- README.md | 2 +- azure-pipelines.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 98a6d00e0..de7032cb9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Build Status](https://dev.azure.com/asottile/asottile/_apis/build/status/pre-commit.pre-commit?branchName=master)](https://dev.azure.com/asottile/asottile/_build/latest?definitionId=21&branchName=master) [![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/asottile/asottile/21/master.svg)](https://dev.azure.com/asottile/asottile/_build/latest?definitionId=21&branchName=master) -[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit) +[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pre-commit/pre-commit/master.svg)](https://results.pre-commit.ci/latest/github/pre-commit/pre-commit/master) ## pre-commit diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fb400107d..41f1e5f9b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,7 +13,6 @@ resources: ref: refs/tags/v2.0.0 jobs: -- template: job--pre-commit.yml@asottile - template: job--python-tox.yml@asottile parameters: toxenvs: [py37] From 70ab1c3b6f30e8e4e4d25f84b2f12ca2ea843940 Mon Sep 17 00:00:00 2001 From: Joseph Moniz Date: Fri, 9 Oct 2020 13:39:18 -0400 Subject: [PATCH 036/129] add coursier (jvm) as a language --- azure-pipelines.yml | 8 +++ pre_commit/languages/all.py | 2 + pre_commit/languages/coursier.py | 71 +++++++++++++++++++ testing/gen-languages-all | 2 +- testing/get-coursier.ps1 | 11 +++ testing/get-coursier.sh | 13 ++++ .../.pre-commit-channel/echo-java.json | 8 +++ .../.pre-commit-hooks.yaml | 5 ++ testing/util.py | 4 ++ tests/repository_test.py | 10 +++ 10 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 pre_commit/languages/coursier.py create mode 100755 testing/get-coursier.ps1 create mode 100755 testing/get-coursier.sh create mode 100644 testing/resources/coursier_hooks_repo/.pre-commit-channel/echo-java.json create mode 100644 testing/resources/coursier_hooks_repo/.pre-commit-hooks.yaml diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 41f1e5f9b..e7256da18 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -34,6 +34,10 @@ jobs: pre_test: - task: UseRubyVersion@0 - template: step--git-install.yml + - bash: | + testing/get-coursier.sh + echo '##vso[task.prependpath]/tmp/coursier' + displayName: install coursier - bash: | testing/get-swift.sh echo '##vso[task.prependpath]/tmp/swift/usr/bin' @@ -44,6 +48,10 @@ jobs: os: linux pre_test: - task: UseRubyVersion@0 + - bash: | + testing/get-coursier.sh + echo '##vso[task.prependpath]/tmp/coursier' + displayName: install coursier - bash: | testing/get-swift.sh echo '##vso[task.prependpath]/tmp/swift/usr/bin' diff --git a/pre_commit/languages/all.py b/pre_commit/languages/all.py index f32780c14..9c2e59d78 100644 --- a/pre_commit/languages/all.py +++ b/pre_commit/languages/all.py @@ -6,6 +6,7 @@ from pre_commit.hook import Hook from pre_commit.languages import conda +from pre_commit.languages import coursier from pre_commit.languages import docker from pre_commit.languages import docker_image from pre_commit.languages import dotnet @@ -41,6 +42,7 @@ class Language(NamedTuple): languages = { # BEGIN GENERATED (testing/gen-languages-all) 'conda': Language(name='conda', ENVIRONMENT_DIR=conda.ENVIRONMENT_DIR, get_default_version=conda.get_default_version, healthy=conda.healthy, install_environment=conda.install_environment, run_hook=conda.run_hook), # noqa: E501 + 'coursier': Language(name='coursier', ENVIRONMENT_DIR=coursier.ENVIRONMENT_DIR, get_default_version=coursier.get_default_version, healthy=coursier.healthy, install_environment=coursier.install_environment, run_hook=coursier.run_hook), # noqa: E501 'docker': Language(name='docker', ENVIRONMENT_DIR=docker.ENVIRONMENT_DIR, get_default_version=docker.get_default_version, healthy=docker.healthy, install_environment=docker.install_environment, run_hook=docker.run_hook), # noqa: E501 'docker_image': Language(name='docker_image', ENVIRONMENT_DIR=docker_image.ENVIRONMENT_DIR, get_default_version=docker_image.get_default_version, healthy=docker_image.healthy, install_environment=docker_image.install_environment, run_hook=docker_image.run_hook), # noqa: E501 'dotnet': Language(name='dotnet', ENVIRONMENT_DIR=dotnet.ENVIRONMENT_DIR, get_default_version=dotnet.get_default_version, healthy=dotnet.healthy, install_environment=dotnet.install_environment, run_hook=dotnet.run_hook), # noqa: E501 diff --git a/pre_commit/languages/coursier.py b/pre_commit/languages/coursier.py new file mode 100644 index 000000000..2841467fc --- /dev/null +++ b/pre_commit/languages/coursier.py @@ -0,0 +1,71 @@ +import contextlib +import os +from typing import Generator +from typing import Sequence +from typing import Tuple + +from pre_commit.envcontext import envcontext +from pre_commit.envcontext import PatchesT +from pre_commit.envcontext import Var +from pre_commit.hook import Hook +from pre_commit.languages import helpers +from pre_commit.prefix import Prefix +from pre_commit.util import clean_path_on_failure + +ENVIRONMENT_DIR = 'coursier' + +get_default_version = helpers.basic_get_default_version +healthy = helpers.basic_healthy + + +def install_environment( + prefix: Prefix, + version: str, + additional_dependencies: Sequence[str], +) -> None: # pragma: win32 no cover + helpers.assert_version_default('coursier', version) + helpers.assert_no_additional_deps('coursier', additional_dependencies) + + envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) + channel = prefix.path('.pre-commit-channel') + with clean_path_on_failure(envdir): + for app_descriptor in os.listdir(channel): + _, app_file = os.path.split(app_descriptor) + app, _ = os.path.splitext(app_file) + helpers.run_setup_cmd( + prefix, + ( + 'cs', + 'install', + '--default-channels=false', + f'--channel={channel}', + app, + f'--dir={envdir}', + ), + ) + + +def get_env_patch(target_dir: str) -> PatchesT: # pragma: win32 no cover + return ( + ('PATH', (target_dir, os.pathsep, Var('PATH'))), + ) + + +@contextlib.contextmanager +def in_env( + prefix: Prefix, +) -> Generator[None, None, None]: # pragma: win32 no cover + target_dir = prefix.path( + helpers.environment_dir(ENVIRONMENT_DIR, get_default_version()), + ) + with envcontext(get_env_patch(target_dir)): + yield + + +def run_hook( + hook: Hook, + file_args: Sequence[str], + color: bool, +) -> Tuple[int, bytes]: # pragma: win32 no cover + with in_env(hook.prefix): + return helpers.run_xargs(hook, hook.cmd, file_args, color=color) diff --git a/testing/gen-languages-all b/testing/gen-languages-all index 35eac042b..d9b01bd04 100755 --- a/testing/gen-languages-all +++ b/testing/gen-languages-all @@ -2,7 +2,7 @@ import sys LANGUAGES = [ - 'conda', 'docker', 'dotnet', 'docker_image', 'fail', 'golang', + 'conda', 'coursier', 'docker', 'dotnet', 'docker_image', 'fail', 'golang', 'node', 'perl', 'pygrep', 'python', 'ruby', 'rust', 'script', 'swift', 'system', ] diff --git a/testing/get-coursier.ps1 b/testing/get-coursier.ps1 new file mode 100755 index 000000000..42e563549 --- /dev/null +++ b/testing/get-coursier.ps1 @@ -0,0 +1,11 @@ +$wc = New-Object System.Net.WebClient + +$coursier_url = "https://github.com/coursier/coursier/releases/download/v2.0.5/cs-x86_64-pc-win32.exe" +$coursier_dest = "C:\coursier\cs.exe" +$coursier_hash ="d63d497f7805261e1cd657b8aaa626f6b8f7264cdb68219b2e6be9dd882033a9" + +New-Item -Path "C:\" -Name "coursier" -ItemType "directory" +$wc.DownloadFile($coursier_url, $coursier_dest) +if ((Get-FileHash $coursier_dest -Algorithm SHA256).Hash -ne $coursier_hash) { + throw "Invalid coursier file" +} diff --git a/testing/get-coursier.sh b/testing/get-coursier.sh new file mode 100755 index 000000000..760c6c125 --- /dev/null +++ b/testing/get-coursier.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# This is a script used in CI to install coursier +set -euxo pipefail + +COURSIER_URL="https://github.com/coursier/coursier/releases/download/v2.0.0/cs-x86_64-pc-linux" +COURSIER_HASH="e2e838b75bc71b16bcb77ce951ad65660c89bda7957c79a0628ec7146d35122f" +ARTIFACT="/tmp/coursier/cs" + +mkdir -p /tmp/coursier +rm -f "$ARTIFACT" +curl --location --silent --output "$ARTIFACT" "$COURSIER_URL" +echo "$COURSIER_HASH $ARTIFACT" | sha256sum --check +chmod ugo+x /tmp/coursier/cs diff --git a/testing/resources/coursier_hooks_repo/.pre-commit-channel/echo-java.json b/testing/resources/coursier_hooks_repo/.pre-commit-channel/echo-java.json new file mode 100644 index 000000000..37f401e2c --- /dev/null +++ b/testing/resources/coursier_hooks_repo/.pre-commit-channel/echo-java.json @@ -0,0 +1,8 @@ +{ + "repositories": [ + "central" + ], + "dependencies": [ + "io.get-coursier:echo:latest.stable" + ] +} diff --git a/testing/resources/coursier_hooks_repo/.pre-commit-hooks.yaml b/testing/resources/coursier_hooks_repo/.pre-commit-hooks.yaml new file mode 100644 index 000000000..d4a143b3d --- /dev/null +++ b/testing/resources/coursier_hooks_repo/.pre-commit-hooks.yaml @@ -0,0 +1,5 @@ +- id: echo-java + name: echo-java + description: echo from java + entry: echo-java + language: coursier diff --git a/testing/util.py b/testing/util.py index f556a8dd9..18cd73427 100644 --- a/testing/util.py +++ b/testing/util.py @@ -40,6 +40,10 @@ def cmd_output_mocked_pre_commit_home( return ret, out.replace('\r\n', '\n'), None +skipif_cant_run_coursier = pytest.mark.skipif( + os.name == 'nt' or parse_shebang.find_executable('cs') is None, + reason="coursier isn't installed or can't be found", +) skipif_cant_run_docker = pytest.mark.skipif( os.name == 'nt' or not docker_is_running(), reason="Docker isn't running or can't be accessed", diff --git a/tests/repository_test.py b/tests/repository_test.py index a6d801ec1..3d5093df6 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -31,6 +31,7 @@ from testing.fixtures import modify_manifest from testing.util import cwd from testing.util import get_resource_path +from testing.util import skipif_cant_run_coursier from testing.util import skipif_cant_run_docker from testing.util import skipif_cant_run_swift from testing.util import xfailif_windows @@ -195,6 +196,15 @@ def test_versioned_python_hook(tempdir_factory, store): ) +@skipif_cant_run_coursier # pragma: win32 no cover +def test_run_a_coursier_hook(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'coursier_hooks_repo', + 'echo-java', + ['Hello World from coursier'], b'Hello World from coursier\n', + ) + + @skipif_cant_run_docker # pragma: win32 no cover def test_run_a_docker_hook(tempdir_factory, store): _test_hook_repo( From 47e758d8f1e711cbc53b8fe7f2629b09b3aa72c4 Mon Sep 17 00:00:00 2001 From: int3l Date: Thu, 17 Sep 2020 00:45:15 +0300 Subject: [PATCH 037/129] Distinct error handling exit codes https://tldp.org/LDP/abs/html/exitcodes.html - exit codes convention --- pre_commit/error_handler.py | 17 +++++++++++------ tests/error_handler_test.py | 16 ++++++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pre_commit/error_handler.py b/pre_commit/error_handler.py index afacab9bb..023dd3596 100644 --- a/pre_commit/error_handler.py +++ b/pre_commit/error_handler.py @@ -12,7 +12,12 @@ from pre_commit.util import force_bytes -def _log_and_exit(msg: str, exc: BaseException, formatted: str) -> None: +def _log_and_exit( + msg: str, + ret_code: int, + exc: BaseException, + formatted: str, +) -> None: error_msg = f'{msg}: {type(exc).__name__}: '.encode() + force_bytes(exc) output.write_line_b(error_msg) @@ -51,7 +56,7 @@ def _log_and_exit(msg: str, exc: BaseException, formatted: str) -> None: _log_line('```') _log_line(formatted.rstrip()) _log_line('```') - raise SystemExit(1) + raise SystemExit(ret_code) @contextlib.contextmanager @@ -60,9 +65,9 @@ def error_handler() -> Generator[None, None, None]: yield except (Exception, KeyboardInterrupt) as e: if isinstance(e, FatalError): - msg = 'An error has occurred' + msg, ret_code = 'An error has occurred', 1 elif isinstance(e, KeyboardInterrupt): - msg = 'Interrupted (^C)' + msg, ret_code = 'Interrupted (^C)', 130 else: - msg = 'An unexpected error has occurred' - _log_and_exit(msg, e, traceback.format_exc()) + msg, ret_code = 'An unexpected error has occurred', 3 + _log_and_exit(msg, ret_code, e, traceback.format_exc()) diff --git a/tests/error_handler_test.py b/tests/error_handler_test.py index 804701f05..6b0bb86d7 100644 --- a/tests/error_handler_test.py +++ b/tests/error_handler_test.py @@ -33,6 +33,7 @@ def test_error_handler_fatal_error(mocked_log_and_exit): mocked_log_and_exit.assert_called_once_with( 'An error has occurred', + 1, exc, # Tested below mock.ANY, @@ -47,7 +48,7 @@ def test_error_handler_fatal_error(mocked_log_and_exit): r' raise exc\n' r'(pre_commit\.errors\.)?FatalError: just a test\n', ) - pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) + pattern.assert_matches(mocked_log_and_exit.call_args[0][3]) def test_error_handler_uncaught_error(mocked_log_and_exit): @@ -57,6 +58,7 @@ def test_error_handler_uncaught_error(mocked_log_and_exit): mocked_log_and_exit.assert_called_once_with( 'An unexpected error has occurred', + 3, exc, # Tested below mock.ANY, @@ -70,7 +72,7 @@ def test_error_handler_uncaught_error(mocked_log_and_exit): r' raise exc\n' r'ValueError: another test\n', ) - pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) + pattern.assert_matches(mocked_log_and_exit.call_args[0][3]) def test_error_handler_keyboardinterrupt(mocked_log_and_exit): @@ -80,6 +82,7 @@ def test_error_handler_keyboardinterrupt(mocked_log_and_exit): mocked_log_and_exit.assert_called_once_with( 'Interrupted (^C)', + 130, exc, # Tested below mock.ANY, @@ -93,7 +96,7 @@ def test_error_handler_keyboardinterrupt(mocked_log_and_exit): r' raise exc\n' r'KeyboardInterrupt\n', ) - pattern.assert_matches(mocked_log_and_exit.call_args[0][2]) + pattern.assert_matches(mocked_log_and_exit.call_args[0][3]) def test_log_and_exit(cap_out, mock_store_dir): @@ -103,8 +106,9 @@ def test_log_and_exit(cap_out, mock_store_dir): 'pre_commit.errors.FatalError: hai\n' ) - with pytest.raises(SystemExit): - error_handler._log_and_exit('msg', FatalError('hai'), tb) + with pytest.raises(SystemExit) as excinfo: + error_handler._log_and_exit('msg', 1, FatalError('hai'), tb) + assert excinfo.value.code == 1 printed = cap_out.get() log_file = os.path.join(mock_store_dir, 'pre-commit.log') @@ -170,7 +174,7 @@ def test_error_handler_no_tty(tempdir_factory): 'from pre_commit.error_handler import error_handler\n' 'with error_handler():\n' ' raise ValueError("\\u2603")\n', - retcode=1, + retcode=3, tempdir_factory=tempdir_factory, pre_commit_home=pre_commit_home, ) From 24dfeed89c0d4d34c46e3310cf28918747d766e1 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 13:00:25 -0700 Subject: [PATCH 038/129] Replace EnvironT with MutableMapping[str, str] --- pre_commit/commands/run.py | 8 ++++---- pre_commit/envcontext.py | 9 ++++----- pre_commit/git.py | 6 ++++-- pre_commit/util.py | 3 --- pre_commit/xargs.py | 4 ++-- tests/commands/run_test.py | 6 +++--- 6 files changed, 17 insertions(+), 19 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 1f28c8c74..0d335e285 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -11,6 +11,7 @@ from typing import Collection from typing import Dict from typing import List +from typing import MutableMapping from typing import Sequence from typing import Set from typing import Tuple @@ -28,7 +29,6 @@ from pre_commit.staged_files_only import staged_files_only from pre_commit.store import Store from pre_commit.util import cmd_output_b -from pre_commit.util import EnvironT logger = logging.getLogger('pre_commit') @@ -116,7 +116,7 @@ def from_config( return Classifier(filenames) -def _get_skips(environ: EnvironT) -> Set[str]: +def _get_skips(environ: MutableMapping[str, str]) -> Set[str]: skips = environ.get('SKIP', '') return {skip.strip() for skip in skips.split(',') if skip.strip()} @@ -258,7 +258,7 @@ def _run_hooks( config: Dict[str, Any], hooks: Sequence[Hook], args: argparse.Namespace, - environ: EnvironT, + environ: MutableMapping[str, str], ) -> int: """Actually run the hooks.""" skips = _get_skips(environ) @@ -315,7 +315,7 @@ def run( config_file: str, store: Store, args: argparse.Namespace, - environ: EnvironT = os.environ, + environ: MutableMapping[str, str] = os.environ, ) -> int: stash = not args.all_files and not args.files diff --git a/pre_commit/envcontext.py b/pre_commit/envcontext.py index 16d3d15e3..4ab0d8cb9 100644 --- a/pre_commit/envcontext.py +++ b/pre_commit/envcontext.py @@ -2,13 +2,12 @@ import enum import os from typing import Generator +from typing import MutableMapping from typing import NamedTuple from typing import Optional from typing import Tuple from typing import Union -from pre_commit.util import EnvironT - class _Unset(enum.Enum): UNSET = 1 @@ -27,7 +26,7 @@ class Var(NamedTuple): PatchesT = Tuple[Tuple[str, ValueT], ...] -def format_env(parts: SubstitutionT, env: EnvironT) -> str: +def format_env(parts: SubstitutionT, env: MutableMapping[str, str]) -> str: return ''.join( env.get(part.name, part.default) if isinstance(part, Var) else part for part in parts @@ -37,7 +36,7 @@ def format_env(parts: SubstitutionT, env: EnvironT) -> str: @contextlib.contextmanager def envcontext( patch: PatchesT, - _env: Optional[EnvironT] = None, + _env: Optional[MutableMapping[str, str]] = None, ) -> Generator[None, None, None]: """In this context, `os.environ` is modified according to `patch`. @@ -50,7 +49,7 @@ def envcontext( replaced with the previous environment """ env = os.environ if _env is None else _env - before = env.copy() + before = dict(env) for k, v in patch: if v is UNSET: diff --git a/pre_commit/git.py b/pre_commit/git.py index ca30eaa7e..13ba664c8 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -3,6 +3,7 @@ import sys from typing import Dict from typing import List +from typing import MutableMapping from typing import Optional from typing import Set @@ -10,7 +11,6 @@ from pre_commit.util import CalledProcessError from pre_commit.util import cmd_output from pre_commit.util import cmd_output_b -from pre_commit.util import EnvironT logger = logging.getLogger(__name__) @@ -24,7 +24,9 @@ def zsplit(s: str) -> List[str]: return [] -def no_git_env(_env: Optional[EnvironT] = None) -> Dict[str, str]: +def no_git_env( + _env: Optional[MutableMapping[str, str]] = None, +) -> Dict[str, str]: # Too many bugs dealing with environment variables and GIT: # https://github.com/pre-commit/pre-commit/issues/300 # In git 2.6.3 (maybe others), git exports GIT_WORK_TREE while running diff --git a/pre_commit/util.py b/pre_commit/util.py index 0338b3737..f4cf7045a 100644 --- a/pre_commit/util.py +++ b/pre_commit/util.py @@ -16,7 +16,6 @@ from typing import Optional from typing import Tuple from typing import Type -from typing import Union import yaml @@ -29,8 +28,6 @@ from importlib_resources import open_binary from importlib_resources import read_text -EnvironT = Union[Dict[str, str], 'os._Environ'] - Loader = getattr(yaml, 'CSafeLoader', yaml.SafeLoader) yaml_load = functools.partial(yaml.load, Loader=Loader) Dumper = getattr(yaml, 'CSafeDumper', yaml.SafeDumper) diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py index 5235dc650..7538b54f6 100644 --- a/pre_commit/xargs.py +++ b/pre_commit/xargs.py @@ -9,6 +9,7 @@ from typing import Generator from typing import Iterable from typing import List +from typing import MutableMapping from typing import Optional from typing import Sequence from typing import Tuple @@ -17,13 +18,12 @@ from pre_commit import parse_shebang from pre_commit.util import cmd_output_b from pre_commit.util import cmd_output_p -from pre_commit.util import EnvironT TArg = TypeVar('TArg') TRet = TypeVar('TRet') -def _environ_size(_env: Optional[EnvironT] = None) -> int: +def _environ_size(_env: Optional[MutableMapping[str, str]] = None) -> int: environ = _env if _env is not None else getattr(os, 'environb', os.environ) size = 8 * len(environ) # number of pointers in `envp` for k, v in environ.items(): diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 2461ed5b3..00b471282 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -2,6 +2,7 @@ import shlex import sys import time +from typing import MutableMapping from unittest import mock import pytest @@ -18,7 +19,6 @@ from pre_commit.commands.run import filter_by_include_exclude from pre_commit.commands.run import run from pre_commit.util import cmd_output -from pre_commit.util import EnvironT from pre_commit.util import make_executable from testing.auto_namedtuple import auto_namedtuple from testing.fixtures import add_config_to_repo @@ -482,7 +482,7 @@ def test_all_push_options_ok(cap_out, store, repo_with_passing_hook): def test_checkout_type(cap_out, store, repo_with_passing_hook): args = run_opts(from_ref='', to_ref='', checkout_type='1') - environ: EnvironT = {} + environ: MutableMapping[str, str] = {} ret, printed = _do_run( cap_out, store, repo_with_passing_hook, args, environ, ) @@ -1032,7 +1032,7 @@ def test_skipped_without_any_setup_for_post_checkout(in_git_dir, store): def test_pre_commit_env_variable_set(cap_out, store, repo_with_passing_hook): args = run_opts() - environ: EnvironT = {} + environ: MutableMapping[str, str] = {} ret, printed = _do_run( cap_out, store, repo_with_passing_hook, args, environ, ) From 29f3e67655f6bf76de402226fcd058966fd24cdd Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 13:56:26 -0700 Subject: [PATCH 039/129] improve node install by using npm pack --- pre_commit/languages/node.py | 21 +++++++++++++++++---- tests/languages/node_test.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index dccbb7ca2..59e534068 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -19,6 +19,7 @@ from pre_commit.util import clean_path_on_failure from pre_commit.util import cmd_output from pre_commit.util import cmd_output_b +from pre_commit.util import rmtree ENVIRONMENT_DIR = 'node_env' @@ -99,11 +100,23 @@ def install_environment( with in_env(prefix, version): # https://npm.community/t/npm-install-g-git-vs-git-clone-cd-npm-install-g/5449 # install as if we installed from git - helpers.run_setup_cmd(prefix, ('npm', 'install')) - helpers.run_setup_cmd( - prefix, - ('npm', 'install', '-g', '.', *additional_dependencies), + + local_install_cmd = ( + 'npm', 'install', '--dev', '--prod', + '--ignore-prepublish', '--no-progress', '--no-save', ) + helpers.run_setup_cmd(prefix, local_install_cmd) + + _, pkg, _ = cmd_output('npm', 'pack', cwd=prefix.prefix_dir) + pkg = prefix.path(pkg.strip()) + + install = ('npm', 'install', '-g', pkg, *additional_dependencies) + helpers.run_setup_cmd(prefix, install) + + # clean these up after installation + if prefix.exists('node_modules'): # pragma: win32 no cover + rmtree(prefix.path('node_modules')) + os.remove(pkg) def run_hook( diff --git a/tests/languages/node_test.py b/tests/languages/node_test.py index c8e2d47d1..8e52268ff 100644 --- a/tests/languages/node_test.py +++ b/tests/languages/node_test.py @@ -1,3 +1,4 @@ +import json import os import shutil import sys @@ -10,6 +11,7 @@ from pre_commit import parse_shebang from pre_commit.languages import node from pre_commit.prefix import Prefix +from pre_commit.util import cmd_output from testing.util import xfailif_windows @@ -78,3 +80,29 @@ def test_unhealthy_if_system_node_goes_missing(tmpdir): node_bin.remove() assert not node.healthy(prefix, 'system') + + +@xfailif_windows # pragma: win32 no cover +def test_installs_without_links_outside_env(tmpdir): + tmpdir.join('bin/main.js').ensure().write( + '#!/usr/bin/env node\n' + '_ = require("lodash"); console.log("success!")\n', + ) + tmpdir.join('package.json').write( + json.dumps({ + 'name': 'foo', + 'version': '0.0.1', + 'bin': {'foo': './bin/main.js'}, + 'dependencies': {'lodash': '*'}, + }), + ) + + prefix = Prefix(str(tmpdir)) + node.install_environment(prefix, 'system', ()) + assert node.healthy(prefix, 'system') + + # this directory shouldn't exist, make sure we succeed without it existing + cmd_output('rm', '-rf', str(tmpdir.join('node_modules'))) + + with node.in_env(prefix, 'system'): + assert cmd_output('foo')[1] == 'success!\n' From 7f9f66e542395ba743e243bdcd92df4e5500d57d Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 14:54:52 -0700 Subject: [PATCH 040/129] don't use system for ruby/node if it is a shim exe --- pre_commit/languages/helpers.py | 21 +++++++++++++++ pre_commit/languages/node.py | 3 +-- pre_commit/languages/ruby.py | 3 +-- tests/languages/helpers_test.py | 45 ++++++++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/pre_commit/languages/helpers.py b/pre_commit/languages/helpers.py index 01c65ab69..69e127878 100644 --- a/pre_commit/languages/helpers.py +++ b/pre_commit/languages/helpers.py @@ -1,6 +1,7 @@ import multiprocessing import os import random +import re from typing import Any from typing import List from typing import Optional @@ -10,6 +11,7 @@ from typing import TYPE_CHECKING import pre_commit.constants as C +from pre_commit import parse_shebang from pre_commit.hook import Hook from pre_commit.prefix import Prefix from pre_commit.util import cmd_output_b @@ -20,6 +22,25 @@ FIXED_RANDOM_SEED = 1542676187 +SHIMS_RE = re.compile(r'[/\\]shims[/\\]') + + +def exe_exists(exe: str) -> bool: + found = parse_shebang.find_executable(exe) + if found is None: # exe exists + return False + + homedir = os.path.expanduser('~') + try: + common: Optional[str] = os.path.commonpath((found, homedir)) + except ValueError: # on windows, different drives raises ValueError + common = None + + return ( + not SHIMS_RE.search(found) and # it is not in a /shims/ directory + common != homedir # it is not in the home directory + ) + def run_setup_cmd(prefix: Prefix, cmd: Tuple[str, ...]) -> None: cmd_output_b(*cmd, cwd=prefix.prefix_dir) diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index 59e534068..8dc4e8ba9 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -7,7 +7,6 @@ from typing import Tuple import pre_commit.constants as C -from pre_commit import parse_shebang from pre_commit.envcontext import envcontext from pre_commit.envcontext import PatchesT from pre_commit.envcontext import UNSET @@ -31,7 +30,7 @@ def get_default_version() -> str: return C.DEFAULT # if node is already installed, we can save a bunch of setup time by # using the installed version - elif all(parse_shebang.find_executable(exe) for exe in ('node', 'npm')): + elif all(helpers.exe_exists(exe) for exe in ('node', 'npm')): return 'system' else: return C.DEFAULT diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index ef73961f1..b6c0bd79f 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -8,7 +8,6 @@ from typing import Tuple import pre_commit.constants as C -from pre_commit import parse_shebang from pre_commit.envcontext import envcontext from pre_commit.envcontext import PatchesT from pre_commit.envcontext import UNSET @@ -26,7 +25,7 @@ @functools.lru_cache(maxsize=1) def get_default_version() -> str: - if all(parse_shebang.find_executable(exe) for exe in ('ruby', 'gem')): + if all(helpers.exe_exists(exe) for exe in ('ruby', 'gem')): return 'system' else: return C.DEFAULT diff --git a/tests/languages/helpers_test.py b/tests/languages/helpers_test.py index fa493cc04..2e8277e02 100644 --- a/tests/languages/helpers_test.py +++ b/tests/languages/helpers_test.py @@ -1,17 +1,60 @@ import multiprocessing -import os +import os.path import sys from unittest import mock import pytest import pre_commit.constants as C +from pre_commit import parse_shebang from pre_commit.languages import helpers from pre_commit.prefix import Prefix from pre_commit.util import CalledProcessError from testing.auto_namedtuple import auto_namedtuple +@pytest.fixture +def find_exe_mck(): + with mock.patch.object(parse_shebang, 'find_executable') as mck: + yield mck + + +@pytest.fixture +def homedir_mck(): + def fake_expanduser(pth): + assert pth == '~' + return os.path.normpath('/home/me') + + with mock.patch.object(os.path, 'expanduser', fake_expanduser): + yield + + +def test_exe_exists_does_not_exist(find_exe_mck, homedir_mck): + find_exe_mck.return_value = None + assert helpers.exe_exists('ruby') is False + + +def test_exe_exists_exists(find_exe_mck, homedir_mck): + find_exe_mck.return_value = os.path.normpath('/usr/bin/ruby') + assert helpers.exe_exists('ruby') is True + + +def test_exe_exists_false_if_shim(find_exe_mck, homedir_mck): + find_exe_mck.return_value = os.path.normpath('/foo/shims/ruby') + assert helpers.exe_exists('ruby') is False + + +def test_exe_exists_false_if_homedir(find_exe_mck, homedir_mck): + find_exe_mck.return_value = os.path.normpath('/home/me/somedir/ruby') + assert helpers.exe_exists('ruby') is False + + +def test_exe_exists_commonpath_raises_ValueError(find_exe_mck, homedir_mck): + find_exe_mck.return_value = os.path.normpath('/usr/bin/ruby') + with mock.patch.object(os.path, 'commonpath', side_effect=ValueError): + assert helpers.exe_exists('ruby') is True + + def test_basic_get_default_version(): assert helpers.basic_get_default_version() == C.DEFAULT From a3c9721d8f4df3de7104f61b336dea3feb5fa52c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 21:59:03 -0700 Subject: [PATCH 041/129] v2.8.0 --- .pre-commit-config.yaml | 18 +++++++------- CHANGELOG.md | 54 +++++++++++++++++++++++++++++++++++++++++ setup.cfg | 3 ++- 3 files changed, 65 insertions(+), 10 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e9cf73946..80fa14bbe 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.1.0 + rev: v3.3.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -12,25 +12,25 @@ repos: - id: requirements-txt-fixer - id: double-quote-string-fixer - repo: https://gitlab.com/pycqa/flake8 - rev: 3.8.3 + rev: 3.8.4 hooks: - id: flake8 - additional_dependencies: [flake8-typing-imports==1.6.0] + additional_dependencies: [flake8-typing-imports==1.10.0] - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: v1.5.3 + rev: v1.5.4 hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.6.0 + rev: v2.7.1 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.6.2 + rev: v2.7.3 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/asottile/reorder_python_imports - rev: v2.3.0 + rev: v2.3.5 hooks: - id: reorder-python-imports args: [--py3-plus] @@ -40,11 +40,11 @@ repos: - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/setup-cfg-fmt - rev: v1.10.0 + rev: v1.15.1 hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.782 + rev: v0.790 hooks: - id: mypy exclude: ^testing/resources/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 1621bb3fc..a56701e3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,57 @@ +2.8.0 - 2020-10-28 +================== + +### Fixes +- Improve `healthy()` check for `language: node` + `language_version: system` + hooks when the system executable goes missing. + - pre-commit/action#45 issue by @KOliver94. + - #1589 issue by @asottile. + - #1590 PR by @asottile. +- Fix excess whitespace in error log traceback + - #1592 PR by @asottile. +- Fix posixlike shebang invocations with shim executables of the git hook + script on windows. + - #1593 issue by @Celeborn2BeAlive. + - #1595 PR by @Celeborn2BeAlive. +- Remove hard-coded `C:\PythonXX\python.exe` path on windows as it caused + confusion (and `virtualenv` can sometimes do better) + - #1599 PR by @asottile. +- Fix `language: ruby` hooks when `--format-executable` is present in a gemrc + - issue by `Rainbow Tux` (discord). + - #1603 PR by @asottile. +- Move `cygwin` / `win32` mismatch error earlier to catch msys2 mismatches + - #1605 issue by @danyeaw. + - #1606 PR by @asottile. +- Remove `-p` workaround for old `virtualenv` + - #1617 PR by @asottile. +- Fix `language: node` installations to not symlink outside of the environment + - pre-commit-ci/issues#2 issue by @DanielJSottile. + - #1667 PR by @asottile. +- Don't identify shim executables as valid `system` for defaulting + `language_version` for `language: node` / `language: ruby` + - #1658 issue by @adithyabsk. + - #1668 PR by @asottile. + +### Features +- Update `rbenv` / `ruby-build` + - #1612 issue by @tdeo. + - #1614 PR by @asottile. +- Update `sample-config` versions + - #1611 PR by @mcsitter. +- Add new language: `dotnet` + - #1598 by @rkm. +- Add `--negate` option to `language: pygrep` hooks + - #1643 PR by @MarcoGorelli. +- Add zipapp support + - #1616 PR by @asottile. +- Run pre-commit through https://pre-commit.ci + - #1662 PR by @asottile. +- Add new language: `coursier` (a jvm-based package manager) + - #1633 PR by @JosephMoniz. +- Exit with distinct codes: 1 (user error), 3 (unexpected error), 130 (^C) + - #1601 PR by @int3l. + + 2.7.1 - 2020-08-23 ================== diff --git a/setup.cfg b/setup.cfg index 4153d7650..eb7a8e199 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.7.1 +version = 2.8.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown @@ -16,6 +16,7 @@ classifiers = Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 + Programming Language :: Python :: 3.9 Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: Implementation :: PyPy From 711248f6785e60d698d915e79841df65de40634a Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 22:01:15 -0700 Subject: [PATCH 042/129] show features first --- CHANGELOG.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a56701e3b..0ae2d7452 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,25 @@ 2.8.0 - 2020-10-28 ================== +### Features +- Update `rbenv` / `ruby-build` + - #1612 issue by @tdeo. + - #1614 PR by @asottile. +- Update `sample-config` versions + - #1611 PR by @mcsitter. +- Add new language: `dotnet` + - #1598 by @rkm. +- Add `--negate` option to `language: pygrep` hooks + - #1643 PR by @MarcoGorelli. +- Add zipapp support + - #1616 PR by @asottile. +- Run pre-commit through https://pre-commit.ci + - #1662 PR by @asottile. +- Add new language: `coursier` (a jvm-based package manager) + - #1633 PR by @JosephMoniz. +- Exit with distinct codes: 1 (user error), 3 (unexpected error), 130 (^C) + - #1601 PR by @int3l. + ### Fixes - Improve `healthy()` check for `language: node` + `language_version: system` hooks when the system executable goes missing. @@ -32,25 +51,6 @@ - #1658 issue by @adithyabsk. - #1668 PR by @asottile. -### Features -- Update `rbenv` / `ruby-build` - - #1612 issue by @tdeo. - - #1614 PR by @asottile. -- Update `sample-config` versions - - #1611 PR by @mcsitter. -- Add new language: `dotnet` - - #1598 by @rkm. -- Add `--negate` option to `language: pygrep` hooks - - #1643 PR by @MarcoGorelli. -- Add zipapp support - - #1616 PR by @asottile. -- Run pre-commit through https://pre-commit.ci - - #1662 PR by @asottile. -- Add new language: `coursier` (a jvm-based package manager) - - #1633 PR by @JosephMoniz. -- Exit with distinct codes: 1 (user error), 3 (unexpected error), 130 (^C) - - #1601 PR by @int3l. - 2.7.1 - 2020-08-23 ================== From 62b8d0ed825bde729a32ffadf0b45f2ea82315f8 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 22:56:10 -0700 Subject: [PATCH 043/129] allow default language_version of system when homedir is / --- pre_commit/languages/helpers.py | 10 ++++++++-- tests/languages/helpers_test.py | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pre_commit/languages/helpers.py b/pre_commit/languages/helpers.py index 69e127878..29138fd1a 100644 --- a/pre_commit/languages/helpers.py +++ b/pre_commit/languages/helpers.py @@ -37,8 +37,14 @@ def exe_exists(exe: str) -> bool: common = None return ( - not SHIMS_RE.search(found) and # it is not in a /shims/ directory - common != homedir # it is not in the home directory + # it is not in a /shims/ directory + not SHIMS_RE.search(found) and + ( + # the homedir is / (docker, service user, etc.) + os.path.dirname(homedir) == homedir or + # the exe is not contained in the home directory + common != homedir + ) ) diff --git a/tests/languages/helpers_test.py b/tests/languages/helpers_test.py index 2e8277e02..669cd3343 100644 --- a/tests/languages/helpers_test.py +++ b/tests/languages/helpers_test.py @@ -55,6 +55,12 @@ def test_exe_exists_commonpath_raises_ValueError(find_exe_mck, homedir_mck): assert helpers.exe_exists('ruby') is True +def test_exe_exists_true_when_homedir_is_slash(find_exe_mck): + find_exe_mck.return_value = os.path.normpath('/usr/bin/ruby') + with mock.patch.object(os.path, 'expanduser', return_value=os.sep): + assert helpers.exe_exists('ruby') is True + + def test_basic_get_default_version(): assert helpers.basic_get_default_version() == C.DEFAULT From b2207e5b044374d90cc349e136279f27e615d0fc Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 28 Oct 2020 23:04:31 -0700 Subject: [PATCH 044/129] v2.8.1 --- CHANGELOG.md | 7 +++++++ setup.cfg | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ae2d7452..c26eb8af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +2.8.1 - 2020-10-28 +================== + +### Fixes +- Allow default `language_version` of `system` when the homedir is `/` + - #1669 PR by @asottile. + 2.8.0 - 2020-10-28 ================== diff --git a/setup.cfg b/setup.cfg index eb7a8e199..94f14ad45 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.8.0 +version = 2.8.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From e05ac1e91fcfa695405df1c18d4432c12e5d7142 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 29 Oct 2020 19:45:06 -0700 Subject: [PATCH 045/129] don't call ruby install for language_version = default --- pre_commit/languages/ruby.py | 4 ++-- tests/languages/ruby_test.py | 40 ++++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index b6c0bd79f..1a0f0c7e3 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -121,8 +121,8 @@ def install_environment( # Need to call this before installing so rbenv's directories # are set up helpers.run_setup_cmd(prefix, ('rbenv', 'init', '-')) - # XXX: this will *always* fail if `version == C.DEFAULT` - _install_ruby(prefix, version) + if version != C.DEFAULT: + _install_ruby(prefix, version) # Need to call this after installing to set up the shims helpers.run_setup_cmd(prefix, ('rbenv', 'rehash')) diff --git a/tests/languages/ruby_test.py b/tests/languages/ruby_test.py index 853bb7321..6c0c9e5e0 100644 --- a/tests/languages/ruby_test.py +++ b/tests/languages/ruby_test.py @@ -30,23 +30,45 @@ def test_uses_system_if_both_gem_and_ruby_are_available(find_exe_mck): assert ACTUAL_GET_DEFAULT_VERSION() == 'system' +@pytest.fixture +def fake_gem_prefix(tmpdir): + gemspec = '''\ +Gem::Specification.new do |s| + s.name = 'pre_commit_dummy_package' + s.version = '0.0.0' + s.summary = 'dummy gem for pre-commit hooks' + s.authors = ['Anthony Sottile'] +end +''' + tmpdir.join('dummy_gem.gemspec').write(gemspec) + yield Prefix(tmpdir) + + +@xfailif_windows # pragma: win32 no cover +def test_install_ruby_system(fake_gem_prefix): + ruby.install_environment(fake_gem_prefix, 'system', ()) + + # Should be able to activate and use rbenv install + with ruby.in_env(fake_gem_prefix, 'system'): + _, out, _ = cmd_output('gem', 'list') + assert 'pre_commit_dummy_package' in out + + @xfailif_windows # pragma: win32 no cover -def test_install_rbenv(tempdir_factory): - prefix = Prefix(tempdir_factory.get()) - ruby._install_rbenv(prefix, C.DEFAULT) +def test_install_ruby_default(fake_gem_prefix): + ruby.install_environment(fake_gem_prefix, C.DEFAULT, ()) # Should have created rbenv directory - assert os.path.exists(prefix.path('rbenv-default')) + assert os.path.exists(fake_gem_prefix.path('rbenv-default')) # Should be able to activate using our script and access rbenv - with ruby.in_env(prefix, 'default'): + with ruby.in_env(fake_gem_prefix, 'default'): cmd_output('rbenv', '--help') @xfailif_windows # pragma: win32 no cover -def test_install_rbenv_with_version(tempdir_factory): - prefix = Prefix(tempdir_factory.get()) - ruby._install_rbenv(prefix, version='1.9.3p547') +def test_install_ruby_with_version(fake_gem_prefix): + ruby.install_environment(fake_gem_prefix, '2.7.2', ()) # Should be able to activate and use rbenv install - with ruby.in_env(prefix, '1.9.3p547'): + with ruby.in_env(fake_gem_prefix, '2.7.2'): cmd_output('rbenv', 'install', '--help') From 3112e080883c4973262569d81b6d3307db08b210 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 30 Oct 2020 13:36:35 -0700 Subject: [PATCH 046/129] v2.8.2 --- CHANGELOG.md | 8 ++++++++ setup.cfg | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c26eb8af8..ff1013f82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +2.8.2 - 2020-10-30 +================== + +### Fixes +- Fix installation of ruby hooks with `language_version: default` + - #1671 issue by @aerickson. + - #1672 PR by @asottile. + 2.8.1 - 2020-10-28 ================== diff --git a/setup.cfg b/setup.cfg index 94f14ad45..32160b9ea 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.8.1 +version = 2.8.2 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 62f668fc3fdf0180a1d66917a599729395f33e44 Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Mon, 2 Nov 2020 15:35:42 +0000 Subject: [PATCH 047/129] add types_or --- pre_commit/clientlib.py | 1 + pre_commit/commands/run.py | 14 +++++++++++--- pre_commit/hook.py | 1 + pre_commit/meta_hooks/check_useless_excludes.py | 6 ++++-- testing/resources/exclude_types_repo/bin/hook.sh | 2 +- testing/resources/failing_hook_repo/bin/hook.sh | 2 +- .../modified_file_returns_zero_repo/bin/hook2.sh | 2 +- testing/resources/script_hooks_repo/bin/hook.sh | 2 +- .../resources/types_or_repo/.pre-commit-hooks.yaml | 6 ++++++ testing/resources/types_or_repo/bin/hook.sh | 3 +++ testing/resources/types_repo/bin/hook.sh | 2 +- tests/commands/run_test.py | 13 +++++++++++++ tests/repository_test.py | 1 + 13 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 testing/resources/types_or_repo/.pre-commit-hooks.yaml create mode 100755 testing/resources/types_or_repo/bin/hook.sh diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 87679bfa6..0b8582bce 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -61,6 +61,7 @@ def _make_argparser(filenames_help: str) -> argparse.ArgumentParser: cfgv.Optional('files', check_string_regex, ''), cfgv.Optional('exclude', check_string_regex, '^$'), cfgv.Optional('types', cfgv.check_array(check_type_tag), ['file']), + cfgv.Optional('types_or', cfgv.check_array(check_type_tag), ['file']), cfgv.Optional('exclude_types', cfgv.check_array(check_type_tag), []), cfgv.Optional( diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 0d335e285..56450e384 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -83,20 +83,28 @@ def by_types( self, names: Sequence[str], types: Collection[str], + types_or: Collection[str], exclude_types: Collection[str], ) -> List[str]: - types, exclude_types = frozenset(types), frozenset(exclude_types) + types = frozenset(types) + types_or = frozenset(types_or) + exclude_types = frozenset(exclude_types) ret = [] for filename in names: tags = self._types_for_file(filename) - if tags >= types and not tags & exclude_types: + if tags >= types and tags & types_or and not tags & exclude_types: ret.append(filename) return ret def filenames_for_hook(self, hook: Hook) -> Tuple[str, ...]: names = self.filenames names = filter_by_include_exclude(names, hook.files, hook.exclude) - names = self.by_types(names, hook.types, hook.exclude_types) + names = self.by_types( + names, + hook.types, + hook.types_or, + hook.exclude_types, + ) return tuple(names) @classmethod diff --git a/pre_commit/hook.py b/pre_commit/hook.py index b65ac42b0..ea773942b 100644 --- a/pre_commit/hook.py +++ b/pre_commit/hook.py @@ -22,6 +22,7 @@ class Hook(NamedTuple): files: str exclude: str types: Sequence[str] + types_or: Sequence[str] exclude_types: Sequence[str] additional_dependencies: Sequence[str] args: Sequence[str] diff --git a/pre_commit/meta_hooks/check_useless_excludes.py b/pre_commit/meta_hooks/check_useless_excludes.py index db6865c6c..12be03f8a 100644 --- a/pre_commit/meta_hooks/check_useless_excludes.py +++ b/pre_commit/meta_hooks/check_useless_excludes.py @@ -47,8 +47,10 @@ def check_useless_excludes(config_file: str) -> int: # the defaults applied during runtime hook = apply_defaults(hook, MANIFEST_HOOK_DICT) names = classifier.filenames - types, exclude_types = hook['types'], hook['exclude_types'] - names = classifier.by_types(names, types, exclude_types) + types = hook['types'] + types_or = hook['types_or'] + exclude_types = hook['exclude_types'] + names = classifier.by_types(names, types, types_or, exclude_types) include, exclude = hook['files'], hook['exclude'] if not exclude_matches_any(names, include, exclude): print( diff --git a/testing/resources/exclude_types_repo/bin/hook.sh b/testing/resources/exclude_types_repo/bin/hook.sh index bdade5132..a828db4d2 100755 --- a/testing/resources/exclude_types_repo/bin/hook.sh +++ b/testing/resources/exclude_types_repo/bin/hook.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -echo $@ +echo "$@" exit 1 diff --git a/testing/resources/failing_hook_repo/bin/hook.sh b/testing/resources/failing_hook_repo/bin/hook.sh index 229ccaf41..7dcffebe8 100755 --- a/testing/resources/failing_hook_repo/bin/hook.sh +++ b/testing/resources/failing_hook_repo/bin/hook.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash echo 'Fail' -echo $@ +echo "$@" exit 1 diff --git a/testing/resources/modified_file_returns_zero_repo/bin/hook2.sh b/testing/resources/modified_file_returns_zero_repo/bin/hook2.sh index 5af177a83..a9f1dcd91 100755 --- a/testing/resources/modified_file_returns_zero_repo/bin/hook2.sh +++ b/testing/resources/modified_file_returns_zero_repo/bin/hook2.sh @@ -1,2 +1,2 @@ #!/usr/bin/env bash -echo $@ +echo "$@" diff --git a/testing/resources/script_hooks_repo/bin/hook.sh b/testing/resources/script_hooks_repo/bin/hook.sh index 6565ee40a..cbc4b3544 100755 --- a/testing/resources/script_hooks_repo/bin/hook.sh +++ b/testing/resources/script_hooks_repo/bin/hook.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -echo $@ +echo "$@" echo 'Hello World' diff --git a/testing/resources/types_or_repo/.pre-commit-hooks.yaml b/testing/resources/types_or_repo/.pre-commit-hooks.yaml new file mode 100644 index 000000000..a4ea920d6 --- /dev/null +++ b/testing/resources/types_or_repo/.pre-commit-hooks.yaml @@ -0,0 +1,6 @@ +- id: python-cython-files + name: Python and Cython files + entry: bin/hook.sh + language: script + types: [file] + types_or: [python, cython] diff --git a/testing/resources/types_or_repo/bin/hook.sh b/testing/resources/types_or_repo/bin/hook.sh new file mode 100755 index 000000000..a828db4d2 --- /dev/null +++ b/testing/resources/types_or_repo/bin/hook.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +echo "$@" +exit 1 diff --git a/testing/resources/types_repo/bin/hook.sh b/testing/resources/types_repo/bin/hook.sh index bdade5132..a828db4d2 100755 --- a/testing/resources/types_repo/bin/hook.sh +++ b/testing/resources/types_repo/bin/hook.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -echo $@ +echo "$@" exit 1 diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 00b471282..34f3a3753 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -219,6 +219,19 @@ def test_types_hook_repository(cap_out, store, tempdir_factory): assert b'bar.notpy' not in printed +def test_types_or_hook_repository(cap_out, store, tempdir_factory): + git_path = make_consuming_repo(tempdir_factory, 'types_or_repo') + with cwd(git_path): + stage_a_file('bar.notpy') + stage_a_file('bar.pxd') + stage_a_file('bar.py') + ret, printed = _do_run(cap_out, store, git_path, run_opts()) + assert ret == 1 + assert b'bar.notpy' not in printed + assert b'bar.pxd' in printed + assert b'bar.py' in printed + + def test_exclude_types_hook_repository(cap_out, store, tempdir_factory): git_path = make_consuming_repo(tempdir_factory, 'exclude_types_repo') with cwd(git_path): diff --git a/tests/repository_test.py b/tests/repository_test.py index 3d5093df6..8d771458f 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -901,6 +901,7 @@ def test_manifest_hooks(tempdir_factory, store): 'post-commit', 'manual', 'post-checkout', 'push', ), types=['file'], + types_or=['file'], verbose=False, ) From aa8023407e616eb77b6e8494bba4321fa1f3e6a5 Mon Sep 17 00:00:00 2001 From: Ruairidh MacLeod Date: Mon, 2 Nov 2020 14:01:46 +0000 Subject: [PATCH 048/129] fix dotnet build cleanup --- pre_commit/languages/dotnet.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pre_commit/languages/dotnet.py b/pre_commit/languages/dotnet.py index a8abc8611..094d2f1ce 100644 --- a/pre_commit/languages/dotnet.py +++ b/pre_commit/languages/dotnet.py @@ -12,7 +12,6 @@ from pre_commit.languages import helpers from pre_commit.prefix import Prefix from pre_commit.util import clean_path_on_failure -from pre_commit.util import rmtree ENVIRONMENT_DIR = 'dotnetenv' BIN_DIR = 'bin' @@ -76,9 +75,9 @@ def install_environment( ), ) - # Cleanup build output - for d in ('bin', 'obj', build_dir): - rmtree(prefix.path(d)) + # Clean the git dir, ignoring the environment dir + clean_cmd = ('git', 'clean', '-ffxd', '-e', f'{ENVIRONMENT_DIR}-*') + helpers.run_setup_cmd(prefix, clean_cmd) def run_hook( From 64876697b5d6094fa132033f19647b99b631ad3f Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 5 Nov 2020 15:59:46 -0800 Subject: [PATCH 049/129] use textwrap.indent instead of _indent --- pre_commit/commands/migrate_config.py | 8 ++------ tests/commands/migrate_config_test.py | 15 --------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/pre_commit/commands/migrate_config.py b/pre_commit/commands/migrate_config.py index d580ff178..621c7e9ad 100644 --- a/pre_commit/commands/migrate_config.py +++ b/pre_commit/commands/migrate_config.py @@ -1,4 +1,5 @@ import re +import textwrap import yaml @@ -6,11 +7,6 @@ from pre_commit.util import yaml_load -def _indent(s: str) -> str: - lines = s.splitlines(True) - return ''.join(' ' * 4 + line if line.strip() else line for line in lines) - - def _is_header_line(line: str) -> bool: return line.startswith(('#', '---')) or not line.strip() @@ -34,7 +30,7 @@ def _migrate_map(contents: str) -> str: yaml_load(trial_contents) contents = trial_contents except yaml.YAMLError: - contents = f'{header}repos:\n{_indent(rest)}' + contents = f'{header}repos:\n{textwrap.indent(rest, " " * 4)}' return contents diff --git a/tests/commands/migrate_config_test.py b/tests/commands/migrate_config_test.py index 6a049d5f6..f5c89d044 100644 --- a/tests/commands/migrate_config_test.py +++ b/tests/commands/migrate_config_test.py @@ -2,24 +2,9 @@ import pre_commit.constants as C from pre_commit.clientlib import InvalidConfigError -from pre_commit.commands.migrate_config import _indent from pre_commit.commands.migrate_config import migrate_config -@pytest.mark.parametrize( - ('s', 'expected'), - ( - ('', ''), - ('a', ' a'), - ('foo\nbar', ' foo\n bar'), - ('foo\n\nbar\n', ' foo\n\n bar\n'), - ('\n\n\n', '\n\n\n'), - ), -) -def test_indent(s, expected): - assert _indent(s) == expected - - def test_migrate_config_normal_format(tmpdir, capsys): cfg = tmpdir.join(C.CONFIG_FILE) cfg.write( From b4ab84df584b63799a903136346302e862155b89 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 5 Nov 2020 16:05:41 -0800 Subject: [PATCH 050/129] only perform migrate_config parsing if it is a list --- pre_commit/commands/migrate_config.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pre_commit/commands/migrate_config.py b/pre_commit/commands/migrate_config.py index d580ff178..1055c9f38 100644 --- a/pre_commit/commands/migrate_config.py +++ b/pre_commit/commands/migrate_config.py @@ -16,17 +16,17 @@ def _is_header_line(line: str) -> bool: def _migrate_map(contents: str) -> str: - # Find the first non-header line - lines = contents.splitlines(True) - i = 0 - # Only loop on non empty configuration file - while i < len(lines) and _is_header_line(lines[i]): - i += 1 + if isinstance(yaml_load(contents), list): + # Find the first non-header line + lines = contents.splitlines(True) + i = 0 + # Only loop on non empty configuration file + while i < len(lines) and _is_header_line(lines[i]): + i += 1 - header = ''.join(lines[:i]) - rest = ''.join(lines[i:]) + header = ''.join(lines[:i]) + rest = ''.join(lines[i:]) - if isinstance(yaml_load(contents), list): # If they are using the "default" flow style of yaml, this operation # will yield a valid configuration try: From 14f984fbcfaf60e76fe8006ef8a3323fd92b67bf Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 6 Nov 2020 13:09:01 -0800 Subject: [PATCH 051/129] improve xargs when running windows batch files --- pre_commit/xargs.py | 10 ++++++++++ tests/xargs_test.py | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py index 7538b54f6..60a057c19 100644 --- a/pre_commit/xargs.py +++ b/pre_commit/xargs.py @@ -137,6 +137,16 @@ def xargs( except parse_shebang.ExecutableNotFoundError as e: return e.to_output()[:2] + # on windows, batch files have a separate length limit than windows itself + if ( + sys.platform == 'win32' and + cmd[0].lower().endswith(('.bat', '.cmd')) + ): # pragma: win32 cover + # this is implementation details but the command gets translated into + # full/path/to/cmd.exe /c *cmd + cmd_exe = parse_shebang.find_executable('cmd.exe') + _max_length = 8192 - len(cmd_exe) - len(' /c ') + partitions = partition(cmd, varargs, target_concurrency, _max_length) def run_cmd_partition( diff --git a/tests/xargs_test.py b/tests/xargs_test.py index 4f6136ede..7e83ef590 100644 --- a/tests/xargs_test.py +++ b/tests/xargs_test.py @@ -195,3 +195,12 @@ def test_xargs_color_true_makes_tty(): ) assert retcode == 0 assert out == b'True\n' + + +@pytest.mark.xfail(os.name == 'posix', reason='nt only') +@pytest.mark.parametrize('filename', ('t.bat', 't.cmd', 'T.CMD')) +def test_xargs_with_batch_files(tmpdir, filename): + f = tmpdir.join(filename) + f.write('echo it works\n') + retcode, out = xargs.xargs((str(f),), ('x',) * 8192) + assert retcode == 0, (retcode, out) From 64d57ba466a598bae8af765a509b233862b48846 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 6 Nov 2020 14:36:43 -0800 Subject: [PATCH 052/129] remove DOTALL on REV_LINE_RE --- pre_commit/commands/autoupdate.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py index 87f6d53d2..7320bb426 100644 --- a/pre_commit/commands/autoupdate.py +++ b/pre_commit/commands/autoupdate.py @@ -84,9 +84,7 @@ def _check_hooks_still_exist_at_rev( ) -REV_LINE_RE = re.compile( - r'^(\s+)rev:(\s*)([\'"]?)([^\s#]+)(.*)(\r?\n)$', re.DOTALL, -) +REV_LINE_RE = re.compile(r'^(\s+)rev:(\s*)([\'"]?)([^\s#]+)(.*)(\r?\n)$') def _original_lines( From 13242f55c5c6c6b9cd8a3cf70627bf0c2b959d25 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 6 Nov 2020 16:29:56 -0800 Subject: [PATCH 053/129] add test to guard against yaml_dump --- tests/commands/autoupdate_test.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py index bd89c1dba..b2bad6014 100644 --- a/tests/commands/autoupdate_test.py +++ b/tests/commands/autoupdate_test.py @@ -1,9 +1,12 @@ import shlex +from unittest import mock import pytest +import yaml import pre_commit.constants as C from pre_commit import git +from pre_commit import util from pre_commit.commands.autoupdate import _check_hooks_still_exist_at_rev from pre_commit.commands.autoupdate import autoupdate from pre_commit.commands.autoupdate import RepositoryCannotBeUpdatedError @@ -173,6 +176,11 @@ def test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store): assert cfg.read() == fmt.format(out_of_date.path, out_of_date.head_rev) +def test_autoupdate_pure_yaml(out_of_date, tmpdir, store): + with mock.patch.object(util, 'Dumper', yaml.SafeDumper): + test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store) + + def test_autoupdate_only_one_to_update(up_to_date, out_of_date, tmpdir, store): fmt = ( 'repos:\n' From 55cdfc6fd26f1b0392e3efdd26d1262b99fb143a Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 9 Nov 2020 12:29:57 -0800 Subject: [PATCH 054/129] use slightly simpler enum syntax --- pre_commit/envcontext.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pre_commit/envcontext.py b/pre_commit/envcontext.py index 4ab0d8cb9..92d975d09 100644 --- a/pre_commit/envcontext.py +++ b/pre_commit/envcontext.py @@ -8,11 +8,7 @@ from typing import Tuple from typing import Union - -class _Unset(enum.Enum): - UNSET = 1 - - +_Unset = enum.Enum('_Unset', 'UNSET') UNSET = _Unset.UNSET From 6dbd53b3872ab58a8d4e8c347a2d1b40bb8c86a0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 16 Nov 2020 17:04:58 +0000 Subject: [PATCH 055/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 80fa14bbe..73692993b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,16 +21,16 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.7.1 + rev: v2.8.2 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.7.3 + rev: v2.7.4 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/asottile/reorder_python_imports - rev: v2.3.5 + rev: v2.3.6 hooks: - id: reorder-python-imports args: [--py3-plus] From a3e3b3d8aa37afd5d4806427e457540db10cfd43 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 17 Nov 2020 11:58:46 -0800 Subject: [PATCH 056/129] fix for rbenv used outside of pre-commit and language_version: default --- pre_commit/languages/ruby.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index 1a0f0c7e3..81bc95436 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -52,7 +52,6 @@ def get_env_patch( else: # pragma: win32 no cover patches += ( ('RBENV_ROOT', venv), - ('RBENV_VERSION', language_version), ( 'PATH', ( os.path.join(venv, 'gems', 'bin'), os.pathsep, @@ -61,6 +60,9 @@ def get_env_patch( ), ), ) + if language_version not in {'system', 'default'}: # pragma: win32 no cover + patches += (('RBENV_VERSION', language_version),) + return patches From 184e1908c88400e6e4a30b4f79276a6669fec26c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 19 Nov 2020 17:13:02 -0800 Subject: [PATCH 057/129] Add link to GitHub Sponsors + Open Collective at the time of writing I am currently unemployed. I'd love to make open source a full time career. if you or your company is deriving value from this free software, please consider [sponsoring] or [supporting]. [sponsoring]: https://github.com/sponsors/asottile [supporting]: https://opencollective.com/pre-commit Committed via https://github.com/asottile/all-repos --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..9408e44d6 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: asottile +open_collective: pre-commit From 120d60223a7bddc13bee956e8209b1ae281f31d3 Mon Sep 17 00:00:00 2001 From: Michael Vincent Date: Thu, 19 Nov 2020 23:09:53 -0600 Subject: [PATCH 058/129] Improve performance by ignoring submodules When git status runs in a repo with submodules, it'll recursively run git status in every submodule as well by default (sequentially). git status is substantially slower on Windows than on Linux. git diff behaves similarly to git status in terms of running recursively within all submodules. In repos with hundreds of submodules, this quickly adds up when git status/diff are called multiple times. Pre-commit runs git status once at the beginning of an operation and then runs git diff before and after each hook. These calls quickly add up and make pre-commit unusable in large repos with lots of submodules. This commit drastically improves performance in repos with lots of submodules and fixes #1701 by telling git status and git diff to ignore submodules. This change is not expected to have any negative effect on existing hooks because each submodule should manage its own hooks instead of relying on superproject hooks to manipulate their contents. --- pre_commit/commands/run.py | 4 +++- pre_commit/git.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 56450e384..508b61a34 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -258,7 +258,9 @@ def _all_filenames(args: argparse.Namespace) -> Collection[str]: def _get_diff() -> bytes: - _, out, _ = cmd_output_b('git', 'diff', '--no-ext-diff', retcode=None) + _, out, _ = cmd_output_b( + 'git', 'diff', '--no-ext-diff', '--ignore-submodules', retcode=None, + ) return out diff --git a/pre_commit/git.py b/pre_commit/git.py index 13ba664c8..8e22dcf0f 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -130,7 +130,9 @@ def get_staged_files(cwd: Optional[str] = None) -> List[str]: def intent_to_add_files() -> List[str]: - _, stdout, _ = cmd_output('git', 'status', '--porcelain', '-z') + _, stdout, _ = cmd_output( + 'git', 'status', '--ignore-submodules', '--porcelain', '-z', + ) parts = list(reversed(zsplit(stdout))) intent_to_add = [] while parts: From 099213f3657998df4028b493d53d87d59bbc126f Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 21 Nov 2020 13:33:20 -0800 Subject: [PATCH 059/129] v2.9.0 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 26 ++++++++++++++++++++++++++ setup.cfg | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 73692993b..72ce7bf42 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.8.2 + rev: v2.9.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index ff1013f82..4c7032b59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,29 @@ +2.9.0 - 2020-11-21 +================== + +### Features +- Add `types_or` which allows matching multiple disparate `types` in a hook + - #1677 by @MarcoGorelli. + - #607 by @asottile. +- Add Github Sponsors / Open Collective links + - https://github.com/sponsors/asottile + - https://opencollective.com/pre-commit + +### Fixes +- Improve cleanup for `language: dotnet` + - #1678 by @rkm. +- Fix "xargs" when running windows batch files + - #1686 PR by @asottile. + - #1604 issue by @apietrzak. + - #1604 issue by @ufwtlsb. +- Fix conflict with external `rbenv` and `language_version: default` + - #1700 PR by @asottile. + - #1699 issue by @abuxton. +- Improve performance of `git status` / `git diff` commands by ignoring + submodules + - #1704 PR by @Vynce. + - #1701 issue by @Vynce. + 2.8.2 - 2020-10-30 ================== diff --git a/setup.cfg b/setup.cfg index 32160b9ea..9b15fe1e6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.8.2 +version = 2.9.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 53109a0127c38f8d6ef57da45ccf1e78e353a10f Mon Sep 17 00:00:00 2001 From: Paul Fischer Date: Sun, 22 Nov 2020 22:31:42 +0100 Subject: [PATCH 060/129] fixed message if repo couldn't be updated due to missing hook(s) --- pre_commit/commands/autoupdate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py index 7320bb426..33a347302 100644 --- a/pre_commit/commands/autoupdate.py +++ b/pre_commit/commands/autoupdate.py @@ -79,8 +79,8 @@ def _check_hooks_still_exist_at_rev( hooks_missing = hooks - {hook['id'] for hook in manifest} if hooks_missing: raise RepositoryCannotBeUpdatedError( - f'Cannot update because the tip of HEAD is missing these hooks:\n' - f'{", ".join(sorted(hooks_missing))}', + f'Cannot update because the update target is missing these ' + f'hooks:\n{", ".join(sorted(hooks_missing))}', ) From 610716d3d1ca661a9487bac774992fb532c6a8e0 Mon Sep 17 00:00:00 2001 From: Paul Fischer Date: Sun, 22 Nov 2020 19:56:56 +0100 Subject: [PATCH 061/129] added warning if globs are used instead of regex --- pre_commit/clientlib.py | 14 ++++++++++++++ tests/clientlib_test.py | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 0b8582bce..d619ea523 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -112,6 +112,18 @@ def validate_manifest_main(argv: Optional[Sequence[str]] = None) -> int: META = 'meta' +class OptionalSensibleRegex(cfgv.OptionalNoDefault): + def check(self, dct: Dict[str, Any]) -> None: + super().check(dct) + + if '/*' in dct.get(self.key, ''): + logger.warning( + f'The {self.key!r} field in hook {dct.get("id")!r} is a ' + f"regex, not a glob -- matching '/*' probably isn't what you " + f'want here', + ) + + class MigrateShaToRev: key = 'rev' @@ -227,6 +239,8 @@ def warn_unknown_keys_repo( for item in MANIFEST_HOOK_DICT.items if item.key != 'id' ), + OptionalSensibleRegex('files', cfgv.check_string), + OptionalSensibleRegex('exclude', cfgv.check_string), ) CONFIG_REPO_DICT = cfgv.Map( 'Repository', 'repo', diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index 2e2f738c9..bfb754b66 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -166,6 +166,23 @@ def test_validate_warn_on_unknown_keys_at_top_level(tmpdir, caplog): ] +def test_validate_optional_sensible_regex(caplog): + config_obj = { + 'id': 'flake8', + 'files': 'dir/*.py', + } + cfgv.validate(config_obj, CONFIG_HOOK_DICT) + + assert caplog.record_tuples == [ + ( + 'pre_commit', + logging.WARNING, + "The 'files' field in hook 'flake8' is a regex, not a glob -- " + "matching '/*' probably isn't what you want here", + ), + ] + + @pytest.mark.parametrize('fn', (validate_config_main, validate_manifest_main)) def test_mains_not_ok(tmpdir, fn): not_yaml = tmpdir.join('f.notyaml') From 7486dee08286061a71ec4f8f9f2661949b13d8a2 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Nov 2020 12:42:58 -0800 Subject: [PATCH 062/129] fix for base executable with non-ascii characters on windows --- pre_commit/languages/python.py | 2 +- tests/languages/python_test.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index 65f521cdc..43b728082 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -36,7 +36,7 @@ def _version_info(exe: str) -> str: def _read_pyvenv_cfg(filename: str) -> Dict[str, str]: ret = {} - with open(filename) as f: + with open(filename, encoding='UTF-8') as f: for line in f: try: k, v = line.split('=') diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index cfe14834f..90d1036a3 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -23,6 +23,13 @@ def test_read_pyvenv_cfg(tmpdir): assert python._read_pyvenv_cfg(pyvenv_cfg) == expected +def test_read_pyvenv_cfg_non_utf8(tmpdir): + pyvenv_cfg = tmpdir.join('pyvenv_cfg') + pyvenv_cfg.write_binary('hello = hello john.š\n'.encode()) + expected = {'hello': 'hello john.š'} + assert python._read_pyvenv_cfg(pyvenv_cfg) == expected + + def test_norm_version_expanduser(): home = os.path.expanduser('~') if os.name == 'nt': # pragma: nt cover From c4f2c6d24d73a1bd98cf9a6437a84ac7b3a1f4cd Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Nov 2020 13:40:28 -0800 Subject: [PATCH 063/129] v2.9.1 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 15 +++++++++++++++ setup.cfg | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 72ce7bf42..1b993e8c5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.9.0 + rev: v2.9.1 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c7032b59..9489b15d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +2.9.1 - 2020-11-25 +================== + +### Fixes +- Improve error message for "hook goes missing" + - #1709 PR by @paulhfischer. + - #1708 issue by @theod07. +- Add warning for `/*` in `files` / `exclude` regexes + - #1707 PR by @paulhfischer. + - #1702 issue by @asottile. +- Fix `healthy()` check for `language: python` on windows when the base + executable has non-ascii characters. + - #1713 PR by @asottile. + - #1711 issue by @Najiva. + 2.9.0 - 2020-11-21 ================== diff --git a/setup.cfg b/setup.cfg index 9b15fe1e6..9188df1b6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.9.0 +version = 2.9.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 0bd6dfc1a286e6bc98bee6ecb1d812c00486c85e Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Nov 2020 13:45:22 -0800 Subject: [PATCH 064/129] also produce sha256sum of pyz on creation --- testing/zipapp/make | 3 +++ 1 file changed, 3 insertions(+) diff --git a/testing/zipapp/make b/testing/zipapp/make index a644946d5..8740b2f5a 100755 --- a/testing/zipapp/make +++ b/testing/zipapp/make @@ -99,6 +99,9 @@ def main() -> int: shebang = '/usr/bin/env python3' zipapp.create_archive(tmpdir, filename, interpreter=shebang) + with open(f'{filename}.sha256sum', 'w') as f: + subprocess.check_call(('sha256sum', filename), stdout=f) + return 0 From 89ab609732ab5dfdcdc1ed7a374cf5c45126e523 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Nov 2020 18:21:37 -0800 Subject: [PATCH 065/129] fix the default value for types_or --- pre_commit/clientlib.py | 2 +- pre_commit/commands/run.py | 6 +++++- tests/commands/run_test.py | 21 +++++++++++++++++++++ tests/repository_test.py | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index d619ea523..20d44925a 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -61,7 +61,7 @@ def _make_argparser(filenames_help: str) -> argparse.ArgumentParser: cfgv.Optional('files', check_string_regex, ''), cfgv.Optional('exclude', check_string_regex, '^$'), cfgv.Optional('types', cfgv.check_array(check_type_tag), ['file']), - cfgv.Optional('types_or', cfgv.check_array(check_type_tag), ['file']), + cfgv.Optional('types_or', cfgv.check_array(check_type_tag), []), cfgv.Optional('exclude_types', cfgv.check_array(check_type_tag), []), cfgv.Optional( diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 508b61a34..1e8fad23b 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -92,7 +92,11 @@ def by_types( ret = [] for filename in names: tags = self._types_for_file(filename) - if tags >= types and tags & types_or and not tags & exclude_types: + if ( + tags >= types and + (not types_or or tags & types_or) and + not tags & exclude_types + ): ret.append(filename) return ret diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 34f3a3753..b4491d01f 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -964,6 +964,27 @@ def test_classifier_does_not_normalize_backslashes_non_windows(tmpdir): assert classifier.filenames == [r'a/b\c'] +def test_classifier_empty_types_or(tmpdir): + tmpdir.join('bar').ensure() + tmpdir.join('foo').mksymlinkto('bar') + with tmpdir.as_cwd(): + classifier = Classifier(('foo', 'bar')) + for_symlink = classifier.by_types( + classifier.filenames, + types=['symlink'], + types_or=[], + exclude_types=[], + ) + for_file = classifier.by_types( + classifier.filenames, + types=['file'], + types_or=[], + exclude_types=[], + ) + assert for_symlink == ['foo'] + assert for_file == ['bar'] + + @pytest.fixture def some_filenames(): return ( diff --git a/tests/repository_test.py b/tests/repository_test.py index 8d771458f..d513cb71f 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -901,7 +901,7 @@ def test_manifest_hooks(tempdir_factory, store): 'post-commit', 'manual', 'post-checkout', 'push', ), types=['file'], - types_or=['file'], + types_or=[], verbose=False, ) From f15cfbb2086018f502d02bb020bbbe367a76849e Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Nov 2020 18:39:54 -0800 Subject: [PATCH 066/129] v2.9.2 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 8 ++++++++ setup.cfg | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1b993e8c5..f768a5b7e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.9.1 + rev: v2.9.2 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 9489b15d5..d3773f6ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +2.9.2 - 2020-11-25 +================== + +### Fixes +- Fix default value for `types_or` so `symlink` and `directory` can be matched + - #1716 PR by @asottile. + - issue by code_bleu in [twitch chat](https://twitch.tv/anthonywritescode) + 2.9.1 - 2020-11-25 ================== diff --git a/setup.cfg b/setup.cfg index 9188df1b6..ed87cb1ac 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.9.1 +version = 2.9.2 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From e6c9b04386f496bd081ba12d78d80d4532acde6c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 26 Nov 2020 09:42:27 -0800 Subject: [PATCH 067/129] fix symlink test for windows --- tests/commands/run_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index b4491d01f..914d567a9 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -966,7 +966,7 @@ def test_classifier_does_not_normalize_backslashes_non_windows(tmpdir): def test_classifier_empty_types_or(tmpdir): tmpdir.join('bar').ensure() - tmpdir.join('foo').mksymlinkto('bar') + os.symlink(tmpdir.join('bar'), tmpdir.join('foo')) with tmpdir.as_cwd(): classifier = Classifier(('foo', 'bar')) for_symlink = classifier.by_types( From 6c6294571afef28e7229520c2beecc41400af60a Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 27 Nov 2020 17:00:17 -0800 Subject: [PATCH 068/129] Add link to issue by CodeBleu --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3773f6ed..e833f9f3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Fixes - Fix default value for `types_or` so `symlink` and `directory` can be matched - #1716 PR by @asottile. - - issue by code_bleu in [twitch chat](https://twitch.tv/anthonywritescode) + - #1718 issue by @CodeBleu. 2.9.1 - 2020-11-25 ================== From 8cfe8e590d9568ff8fb9d5deb0c46776ee966162 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 28 Nov 2020 15:16:52 -0800 Subject: [PATCH 069/129] don't crash on cygwin mismatch check --- pre_commit/git.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pre_commit/git.py b/pre_commit/git.py index 8e22dcf0f..156e53d20 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -201,7 +201,10 @@ def check_for_cygwin_mismatch() -> None: """See https://github.com/pre-commit/pre-commit/issues/354""" if sys.platform in ('cygwin', 'win32'): # pragma: no cover (windows) is_cygwin_python = sys.platform == 'cygwin' - toplevel = get_root() + try: + toplevel = get_root() + except FatalError: # skip the check if we're not in a git repo + return is_cygwin_git = toplevel.startswith('/') if is_cygwin_python ^ is_cygwin_git: From bb0d9573a9a87616b65ee4c1cedccb18406d5982 Mon Sep 17 00:00:00 2001 From: francisco souza Date: Sat, 5 Dec 2020 22:26:38 -0500 Subject: [PATCH 070/129] util: also run chmod on EPERM Writing a test for this one is tricky, because I was seeing the issue only when the directory being removed is a docker volume, so instead of getting EACCES we get EPERM. This is easy to reproduce though. The existing test fails when the directory being used for the files is a docker volume: ``` % docker run \ -v $(mktemp -d):/tmp \ -v ${PWD}:/src \ -w /src \ python:3 \ bash -c 'pip install -e . && pip install -r requirements-dev.txt && python -m pytest tests/util_test.py' ``` --- pre_commit/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pre_commit/util.py b/pre_commit/util.py index f4cf7045a..fc506b98e 100644 --- a/pre_commit/util.py +++ b/pre_commit/util.py @@ -255,7 +255,7 @@ def handle_remove_readonly( excvalue = exc[1] if ( func in (os.rmdir, os.remove, os.unlink) and - excvalue.errno == errno.EACCES + 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) From c598785b6f7be0fb9371eb54e48fd09668210a96 Mon Sep 17 00:00:00 2001 From: francisco souza <108725+fsouza@users.noreply.github.com> Date: Sun, 6 Dec 2020 07:45:31 -0800 Subject: [PATCH 071/129] util: use set instead of tuple in errno check Co-authored-by: Paul Fischer <70564747+paulhfischer@users.noreply.github.com> --- pre_commit/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pre_commit/util.py b/pre_commit/util.py index fc506b98e..b5f40ada4 100644 --- a/pre_commit/util.py +++ b/pre_commit/util.py @@ -255,7 +255,7 @@ def handle_remove_readonly( excvalue = exc[1] if ( func in (os.rmdir, os.remove, os.unlink) and - excvalue.errno in (errno.EACCES, errno.EPERM) + 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) From 29d15de38ee0f78f598e8888fd3d6e8789a63bef Mon Sep 17 00:00:00 2001 From: Mark Rogaski Date: Sun, 6 Dec 2020 22:57:31 -0500 Subject: [PATCH 072/129] git: changed rev-parse option for Git 2.25 changes to --show-toplevel Git 2.25 introduced a change to "rev-parse --show-toplevel" that exposed underlying volumes for Windows drives mapped with SUBST. We use "rev-parse --show-cdup" to get the appropriate path, but must perform an extra check to see if we are in the .git directory. --- pre_commit/git.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/pre_commit/git.py b/pre_commit/git.py index 156e53d20..50962745b 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -47,21 +47,26 @@ def no_git_env( def get_root() -> str: + # Git 2.25 introduced a change to "rev-parse --show-toplevel" that exposed + # underlying volumes for Windows drives mapped with SUBST. We use + # "rev-parse --show-cdup" to get the appropriate path, but must perform + # an extra check to see if we are in the .git directory. try: - root = cmd_output('git', 'rev-parse', '--show-toplevel')[1].strip() + root = os.path.realpath( + cmd_output('git', 'rev-parse', '--show-cdup')[1].strip(), + ) + git_dir = os.path.realpath(get_git_dir()) except CalledProcessError: raise FatalError( 'git failed. Is it installed, and are you in a Git repository ' 'directory?', ) - else: - if root == '': # pragma: no cover (old git) - raise FatalError( - 'git toplevel unexpectedly empty! make sure you are not ' - 'inside the `.git` directory of your repository.', - ) - else: - return root + if os.path.commonpath((root, git_dir)) == git_dir: + raise FatalError( + 'git toplevel unexpectedly empty! make sure you are not ' + 'inside the `.git` directory of your repository.', + ) + return root def get_git_dir(git_root: str = '.') -> str: From a062cbd439861a8f05b58b9454ba04695de8cda3 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 7 Dec 2020 15:06:39 -0800 Subject: [PATCH 073/129] v2.9.3 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 13 +++++++++++++ setup.cfg | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f768a5b7e..d42bb1b11 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.9.2 + rev: v2.9.3 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index e833f9f3d..ef36decce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +2.9.3 - 2020-12-07 +================== + +### Fixes +- Fix crash on cygwin mismatch check outside of a git directory + - #1721 PR by @asottile. + - #1720 issue by @chronoB. +- Fix cleanup code on docker volumes for go + - #1725 PR by @fsouza. +- Fix working directory detection on SUBST drives on windows + - #1727 PR by mrogaski. + - #1610 issue by @jcameron73. + 2.9.2 - 2020-11-25 ================== diff --git a/setup.cfg b/setup.cfg index ed87cb1ac..2e77fcf4e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.9.2 +version = 2.9.3 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 2d54ea112aab5568c149bb81f428dce70010a151 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 7 Dec 2020 15:09:02 -0800 Subject: [PATCH 074/129] fix typo in CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef36decce..c85c2c81c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ - Fix cleanup code on docker volumes for go - #1725 PR by @fsouza. - Fix working directory detection on SUBST drives on windows - - #1727 PR by mrogaski. + - #1727 PR by @mrogaski. - #1610 issue by @jcameron73. 2.9.2 - 2020-11-25 From 38a4a0aa3b8769976323162b435bfe8304c225f4 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 31 May 2020 11:30:41 -0700 Subject: [PATCH 075/129] allow configuration for pre-commit.ci --- pre_commit/clientlib.py | 4 ++++ tests/clientlib_test.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 20d44925a..916c5ff23 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -297,9 +297,13 @@ def warn_unknown_keys_repo( 'exclude', 'fail_fast', 'minimum_pre_commit_version', + 'ci', ), warn_unknown_keys_root, ), + + # do not warn about configuration for pre-commit.ci + cfgv.OptionalNoDefault('ci', cfgv.check_type(dict)), ) diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index bfb754b66..ba602362f 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -166,6 +166,20 @@ def test_validate_warn_on_unknown_keys_at_top_level(tmpdir, caplog): ] +def test_ci_map_key_allowed_at_top_level(caplog): + cfg = { + 'ci': {'skip': ['foo']}, + 'repos': [{'repo': 'meta', 'hooks': [{'id': 'identity'}]}], + } + cfgv.validate(cfg, CONFIG_SCHEMA) + assert not caplog.record_tuples + + +def test_ci_key_must_be_map(): + with pytest.raises(cfgv.ValidationError): + cfgv.validate({'ci': 'invalid', 'repos': []}, CONFIG_SCHEMA) + + def test_validate_optional_sensible_regex(caplog): config_obj = { 'id': 'flake8', From 1e4de986a8804aa620a001f4e04c9d4755e9d6b2 Mon Sep 17 00:00:00 2001 From: Paul Fischer Date: Tue, 8 Dec 2020 00:00:31 +0100 Subject: [PATCH 076/129] added warning if mutable rev is used --- pre_commit/clientlib.py | 28 ++++++++++++++++++ tests/clientlib_test.py | 64 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 916c5ff23..5dfaf7a3f 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -1,6 +1,7 @@ import argparse import functools import logging +import re import shlex import sys from typing import Any @@ -112,6 +113,25 @@ def validate_manifest_main(argv: Optional[Sequence[str]] = None) -> int: META = 'meta' +# should inherit from cfgv.Conditional if sha support is dropped +class WarnMutableRev(cfgv.ConditionalOptional): + def check(self, dct: Dict[str, Any]) -> None: + super().check(dct) + + if self.key in dct: + rev = dct[self.key] + + if '.' not in rev and not re.match(r'^[a-fA-F0-9]+$', rev): + logger.warning( + f'The {self.key!r} field of repo {dct["repo"]!r} ' + f'appears to be a mutable reference ' + f'(moving tag / branch). Mutable references are never ' + f'updated after first install and are not supported. ' + f'See https://pre-commit.com/#using-the-latest-version-for-a-repository ' # noqa: E501 + f'for more details.', + ) + + class OptionalSensibleRegex(cfgv.OptionalNoDefault): def check(self, dct: Dict[str, Any]) -> None: super().check(dct) @@ -261,6 +281,14 @@ def warn_unknown_keys_repo( ), MigrateShaToRev(), + WarnMutableRev( + 'rev', + cfgv.check_string, + '', + 'repo', + cfgv.NotIn(LOCAL, META), + True, + ), cfgv.WarnAdditionalKeys(('repo', 'rev', 'hooks'), warn_unknown_keys_repo), ) DEFAULT_LANGUAGE_VERSION = cfgv.Map( diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index ba602362f..d08ecdf05 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -180,6 +180,70 @@ def test_ci_key_must_be_map(): cfgv.validate({'ci': 'invalid', 'repos': []}, CONFIG_SCHEMA) +@pytest.mark.parametrize( + 'rev', + ( + 'v0.12.4', + 'b27f281', + 'b27f281eb9398fc8504415d7fbdabf119ea8c5e1', + '19.10b0', + '4.3.21-2', + ), +) +def test_warn_mutable_rev_ok(caplog, rev): + config_obj = { + 'repo': 'https://gitlab.com/pycqa/flake8', + 'rev': rev, + 'hooks': [{'id': 'flake8'}], + } + cfgv.validate(config_obj, CONFIG_REPO_DICT) + + assert caplog.record_tuples == [] + + +@pytest.mark.parametrize( + 'rev', + ( + '', + 'HEAD', + 'stable', + 'master', + 'some_branch_name', + ), +) +def test_warn_mutable_rev_invalid(caplog, rev): + config_obj = { + 'repo': 'https://gitlab.com/pycqa/flake8', + 'rev': rev, + 'hooks': [{'id': 'flake8'}], + } + cfgv.validate(config_obj, CONFIG_REPO_DICT) + + assert caplog.record_tuples == [ + ( + 'pre_commit', + logging.WARNING, + "The 'rev' field of repo 'https://gitlab.com/pycqa/flake8' " + 'appears to be a mutable reference (moving tag / branch). ' + 'Mutable references are never updated after first install and are ' + 'not supported. ' + 'See https://pre-commit.com/#using-the-latest-version-for-a-repository ' # noqa: E501 + 'for more details.', + ), + ] + + +def test_warn_mutable_rev_conditional(): + config_obj = { + 'repo': 'meta', + 'rev': '3.7.7', + 'hooks': [{'id': 'flake8'}], + } + + with pytest.raises(cfgv.ValidationError): + cfgv.validate(config_obj, CONFIG_REPO_DICT) + + def test_validate_optional_sensible_regex(caplog): config_obj = { 'id': 'flake8', From 75aa6a0840c46f43dbd2c6176103dc7d25977457 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Dec 2020 16:43:31 +0000 Subject: [PATCH 077/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d42bb1b11..0a3855243 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.3.0 + rev: v3.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -40,7 +40,7 @@ repos: - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/setup-cfg-fmt - rev: v1.15.1 + rev: v1.16.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy From b1a9209f9f9a4b4b8d6bdf5d2c0660d70c6b3312 Mon Sep 17 00:00:00 2001 From: Paul Fischer Date: Fri, 1 Jan 2021 23:57:24 +0100 Subject: [PATCH 078/129] extended warning if globs are used instead of regex to top level --- pre_commit/clientlib.py | 19 ++++++++++++++++--- tests/clientlib_test.py | 19 ++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 5dfaf7a3f..8f35057d2 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -132,7 +132,7 @@ def check(self, dct: Dict[str, Any]) -> None: ) -class OptionalSensibleRegex(cfgv.OptionalNoDefault): +class OptionalSensibleRegexAtHook(cfgv.OptionalNoDefault): def check(self, dct: Dict[str, Any]) -> None: super().check(dct) @@ -144,6 +144,17 @@ def check(self, dct: Dict[str, Any]) -> None: ) +class OptionalSensibleRegexAtTop(cfgv.OptionalNoDefault): + def check(self, dct: Dict[str, Any]) -> None: + super().check(dct) + + if '/*' in dct.get(self.key, ''): + logger.warning( + f'The top-level {self.key!r} field is a regex, not a glob -- ' + f"matching '/*' probably isn't what you want here", + ) + + class MigrateShaToRev: key = 'rev' @@ -259,8 +270,8 @@ def warn_unknown_keys_repo( for item in MANIFEST_HOOK_DICT.items if item.key != 'id' ), - OptionalSensibleRegex('files', cfgv.check_string), - OptionalSensibleRegex('exclude', cfgv.check_string), + OptionalSensibleRegexAtHook('files', cfgv.check_string), + OptionalSensibleRegexAtHook('exclude', cfgv.check_string), ) CONFIG_REPO_DICT = cfgv.Map( 'Repository', 'repo', @@ -329,6 +340,8 @@ def warn_unknown_keys_repo( ), warn_unknown_keys_root, ), + OptionalSensibleRegexAtTop('files', cfgv.check_string), + OptionalSensibleRegexAtTop('exclude', cfgv.check_string), # do not warn about configuration for pre-commit.ci cfgv.OptionalNoDefault('ci', cfgv.check_type(dict)), diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index d08ecdf05..6bdb0d624 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -244,7 +244,7 @@ def test_warn_mutable_rev_conditional(): cfgv.validate(config_obj, CONFIG_REPO_DICT) -def test_validate_optional_sensible_regex(caplog): +def test_validate_optional_sensible_regex_at_hook_level(caplog): config_obj = { 'id': 'flake8', 'files': 'dir/*.py', @@ -261,6 +261,23 @@ def test_validate_optional_sensible_regex(caplog): ] +def test_validate_optional_sensible_regex_at_top_level(caplog): + config_obj = { + 'files': 'dir/*.py', + 'repos': [], + } + cfgv.validate(config_obj, CONFIG_SCHEMA) + + assert caplog.record_tuples == [ + ( + 'pre_commit', + logging.WARNING, + "The top-level 'files' field is a regex, not a glob -- matching " + "'/*' probably isn't what you want here", + ), + ] + + @pytest.mark.parametrize('fn', (validate_config_main, validate_manifest_main)) def test_mains_not_ok(tmpdir, fn): not_yaml = tmpdir.join('f.notyaml') From 42cc56c0f65e48398aef4a277e71a399bd52b79d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Jan 2021 16:43:53 +0000 Subject: [PATCH 079/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0a3855243..649aca24b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: reorder-python-imports args: [--py3-plus] - repo: https://github.com/asottile/add-trailing-comma - rev: v2.0.1 + rev: v2.0.2 hooks: - id: add-trailing-comma args: [--py36-plus] From d57207510dedd6303b32ba70374dc01d4880cc77 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 22 Jan 2021 12:26:22 -0800 Subject: [PATCH 080/129] fix reference to github.com/golang/example --- tests/repository_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/repository_test.py b/tests/repository_test.py index d513cb71f..860c6dc28 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -569,7 +569,7 @@ def test_additional_golang_dependencies_installed( path = make_repo(tempdir_factory, 'golang_hooks_repo') config = make_config_from_repo(path) # A small go package - deps = ['github.com/golang/example/hello'] + deps = ['golang.org/x/example/hello'] config['hooks'][0]['additional_dependencies'] = deps hook = _get_hook(config, store, 'golang-hook') binaries = os.listdir( @@ -590,7 +590,7 @@ def test_local_golang_additional_dependencies(store): 'name': 'hello', 'entry': 'hello', 'language': 'golang', - 'additional_dependencies': ['github.com/golang/example/hello'], + 'additional_dependencies': ['golang.org/x/example/hello'], }], } hook = _get_hook(config, store, 'hello') From cb5ed6276d334fa001443c49f189bb35c5246ac5 Mon Sep 17 00:00:00 2001 From: surafelabebe Date: Mon, 21 Dec 2020 15:16:11 -0800 Subject: [PATCH 081/129] Expose remote branch ref as an environment variable --- pre_commit/commands/hook_impl.py | 7 ++++++- pre_commit/commands/run.py | 3 ++- pre_commit/main.py | 3 +++ testing/util.py | 2 ++ tests/commands/run_test.py | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/hook_impl.py b/pre_commit/commands/hook_impl.py index d0e226f8c..25c5fdffd 100644 --- a/pre_commit/commands/hook_impl.py +++ b/pre_commit/commands/hook_impl.py @@ -69,6 +69,7 @@ def _ns( color: bool, *, all_files: bool = False, + remote_branch: Optional[str] = None, from_ref: Optional[str] = None, to_ref: Optional[str] = None, remote_name: Optional[str] = None, @@ -79,6 +80,7 @@ def _ns( return argparse.Namespace( color=color, hook_stage=hook_type.replace('pre-', ''), + remote_branch=remote_branch, from_ref=from_ref, to_ref=to_ref, remote_name=remote_name, @@ -106,13 +108,14 @@ def _pre_push_ns( remote_url = args[1] for line in stdin.decode().splitlines(): - _, local_sha, _, remote_sha = line.split() + _, local_sha, remote_branch, remote_sha = line.split() if local_sha == Z40: continue elif remote_sha != Z40 and _rev_exists(remote_sha): return _ns( 'pre-push', color, from_ref=remote_sha, to_ref=local_sha, + remote_branch=remote_branch, remote_name=remote_name, remote_url=remote_url, ) else: @@ -133,6 +136,7 @@ def _pre_push_ns( 'pre-push', color, all_files=True, remote_name=remote_name, remote_url=remote_url, + remote_branch=remote_branch, ) else: rev_cmd = ('git', 'rev-parse', f'{first_ancestor}^') @@ -141,6 +145,7 @@ def _pre_push_ns( 'pre-push', color, from_ref=source, to_ref=local_sha, remote_name=remote_name, remote_url=remote_url, + remote_branch=remote_branch, ) # nothing to push diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 1e8fad23b..891488d59 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -371,7 +371,8 @@ def run( environ['PRE_COMMIT_FROM_REF'] = args.from_ref environ['PRE_COMMIT_TO_REF'] = args.to_ref - if args.remote_name and args.remote_url: + if args.remote_name and args.remote_url and args.remote_branch: + environ['PRE_COMMIT_REMOTE_BRANCH'] = args.remote_branch environ['PRE_COMMIT_REMOTE_NAME'] = args.remote_name environ['PRE_COMMIT_REMOTE_URL'] = args.remote_url diff --git a/pre_commit/main.py b/pre_commit/main.py index c1eb104ac..ce850c45c 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -96,6 +96,9 @@ def _add_run_options(parser: argparse.ArgumentParser) -> None: '--hook-stage', choices=C.STAGES, default='commit', help='The stage during which the hook is fired. One of %(choices)s', ) + parser.add_argument( + '--remote-branch', help='Remote branch ref used by `git push`.', + ) parser.add_argument( '--from-ref', '--source', '-s', help=( diff --git a/testing/util.py b/testing/util.py index 18cd73427..1f8cb35d2 100644 --- a/testing/util.py +++ b/testing/util.py @@ -61,6 +61,7 @@ def run_opts( color=False, verbose=False, hook=None, + remote_branch='', from_ref='', to_ref='', remote_name='', @@ -78,6 +79,7 @@ def run_opts( color=color, verbose=verbose, hook=hook, + remote_branch=remote_branch, from_ref=from_ref, to_ref=to_ref, remote_name=remote_name, diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 914d567a9..eaea8137c 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -486,6 +486,7 @@ def test_from_ref_to_ref_error_msg_error( def test_all_push_options_ok(cap_out, store, repo_with_passing_hook): args = run_opts( from_ref='master', to_ref='master', + remote_branch='master', remote_name='origin', remote_url='https://example.com/repo', ) ret, printed = _do_run(cap_out, store, repo_with_passing_hook, args) From 4f39946ea39007d357aa050126e8f877869ff719 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 22 Jan 2021 13:54:00 -0800 Subject: [PATCH 082/129] produce a more useful error message when non-installable things use language_version or additional_dependencies --- pre_commit/repository.py | 18 ++++++++++++++++ tests/repository_test.py | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/pre_commit/repository.py b/pre_commit/repository.py index 46e96c1dc..15827dde4 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -118,6 +118,24 @@ def _hook( if not ret['stages']: ret['stages'] = root_config['default_stages'] + if languages[lang].ENVIRONMENT_DIR is None: + if ret['language_version'] != C.DEFAULT: + logger.error( + f'The hook `{ret["id"]}` specifies `language_version` but is ' + f'using language `{lang}` which does not install an ' + f'environment. ' + f'Perhaps you meant to use a specific language?', + ) + exit(1) + if ret['additional_dependencies']: + logger.error( + f'The hook `{ret["id"]}` specifies `additional_dependencies` ' + f'but is using language `{lang}` which does not install an ' + f'environment. ' + f'Perhaps you meant to use a specific language?', + ) + exit(1) + return ret diff --git a/tests/repository_test.py b/tests/repository_test.py index 860c6dc28..516f52e1d 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -942,3 +942,49 @@ def test_dotnet_hook(tempdir_factory, store, repo): tempdir_factory, store, repo, 'dotnet example hook', [], b'Hello from dotnet!\n', ) + + +def test_non_installable_hook_error_for_language_version(store, caplog): + config = { + 'repo': 'local', + 'hooks': [{ + 'id': 'system-hook', + 'name': 'system-hook', + 'language': 'system', + 'entry': 'python3 -c "import sys; print(sys.version)"', + 'language_version': 'python3.10', + }], + } + with pytest.raises(SystemExit) as excinfo: + _get_hook(config, store, 'system-hook') + assert excinfo.value.code == 1 + + msg, = caplog.messages + assert msg == ( + 'The hook `system-hook` specifies `language_version` but is using ' + 'language `system` which does not install an environment. ' + 'Perhaps you meant to use a specific language?' + ) + + +def test_non_installable_hook_error_for_additional_dependencies(store, caplog): + config = { + 'repo': 'local', + 'hooks': [{ + 'id': 'system-hook', + 'name': 'system-hook', + 'language': 'system', + 'entry': 'python3 -c "import sys; print(sys.version)"', + 'additional_dependencies': ['astpretty'], + }], + } + with pytest.raises(SystemExit) as excinfo: + _get_hook(config, store, 'system-hook') + assert excinfo.value.code == 1 + + msg, = caplog.messages + assert msg == ( + 'The hook `system-hook` specifies `additional_dependencies` but is ' + 'using language `system` which does not install an environment. ' + 'Perhaps you meant to use a specific language?' + ) From c7cbb1e6ad9fbb43d3124b20806322df9f3f59ff Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 22 Jan 2021 14:02:45 -0800 Subject: [PATCH 083/129] replace fake_log_handler with caplog --- tests/conftest.py | 9 --------- tests/repository_test.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 335d2614f..b36ce5ac5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -261,15 +261,6 @@ def cap_out(): yield Fixture(stream) -@pytest.fixture -def fake_log_handler(): - handler = mock.Mock(level=logging.INFO) - logger = logging.getLogger('pre_commit') - logger.addHandler(handler) - yield handler - logger.removeHandler(handler) - - @pytest.fixture(scope='session', autouse=True) def set_git_templatedir(tmpdir_factory): tdir = str(tmpdir_factory.mktemp('git_template_dir')) diff --git a/tests/repository_test.py b/tests/repository_test.py index 860c6dc28..660bc6463 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -640,7 +640,7 @@ def test_fail_hooks(store): ) -def test_unknown_keys(store, fake_log_handler): +def test_unknown_keys(store, caplog): config = { 'repo': 'local', 'hooks': [{ @@ -653,8 +653,8 @@ def test_unknown_keys(store, fake_log_handler): }], } _get_hook(config, store, 'too-much') - expected = 'Unexpected key(s) present on local => too-much: foo, hello' - assert fake_log_handler.handle.call_args[0][0].msg == expected + msg, = caplog.messages + assert msg == 'Unexpected key(s) present on local => too-much: foo, hello' def test_reinstall(tempdir_factory, store, log_info_mock): @@ -832,27 +832,28 @@ def test_default_stages(store, local_python_config): assert hook.stages == ['push'] -def test_hook_id_not_present(tempdir_factory, store, fake_log_handler): +def test_hook_id_not_present(tempdir_factory, store, caplog): path = make_repo(tempdir_factory, 'script_hooks_repo') config = make_config_from_repo(path) config['hooks'][0]['id'] = 'i-dont-exist' with pytest.raises(SystemExit): _get_hook(config, store, 'i-dont-exist') - assert fake_log_handler.handle.call_args[0][0].msg == ( + _, msg = caplog.messages + assert msg == ( f'`i-dont-exist` is not present in repository file://{path}. ' f'Typo? Perhaps it is introduced in a newer version? ' f'Often `pre-commit autoupdate` fixes this.' ) -def test_too_new_version(tempdir_factory, store, fake_log_handler): +def test_too_new_version(tempdir_factory, store, caplog): path = make_repo(tempdir_factory, 'script_hooks_repo') with modify_manifest(path) as manifest: manifest[0]['minimum_pre_commit_version'] = '999.0.0' config = make_config_from_repo(path) with pytest.raises(SystemExit): _get_hook(config, store, 'bash_hook') - msg = fake_log_handler.handle.call_args[0][0].msg + _, msg = caplog.messages pattern = re_assert.Matches( r'^The hook `bash_hook` requires pre-commit version 999\.0\.0 but ' r'version \d+\.\d+\.\d+ is installed. ' From 74183d91cbd24cac5dfd27dc0f737d40d665e0a8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:40:14 +0000 Subject: [PATCH 084/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 649aca24b..cd5bd2637 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: reorder-python-imports args: [--py3-plus] - repo: https://github.com/asottile/add-trailing-comma - rev: v2.0.2 + rev: v2.1.0 hooks: - id: add-trailing-comma args: [--py36-plus] @@ -44,7 +44,7 @@ repos: hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.790 + rev: v0.800 hooks: - id: mypy exclude: ^testing/resources/ From d258650ad4a6b0c9845c82e8c74170df337ade41 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 25 Jan 2021 12:47:07 -0800 Subject: [PATCH 085/129] use comparison with sys.platform so mypy understands it --- pre_commit/file_lock.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pre_commit/file_lock.py b/pre_commit/file_lock.py index 5e7a05862..55a8eb29c 100644 --- a/pre_commit/file_lock.py +++ b/pre_commit/file_lock.py @@ -1,11 +1,11 @@ import contextlib import errno -import os +import sys from typing import Callable from typing import Generator -if os.name == 'nt': # pragma: no cover (windows) +if sys.platform == 'win32': # pragma: no cover (windows) import msvcrt # https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/locking From f75fc6b2a85a61e50a0270d24a3589a083f1c06c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 27 Jan 2021 10:08:48 -0800 Subject: [PATCH 086/129] fix execution in worktrees in subdirectories of bare repositories --- pre_commit/git.py | 2 +- tests/git_test.py | 20 ++++++++++++++++++++ tests/main_test.py | 5 ----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pre_commit/git.py b/pre_commit/git.py index 50962745b..bec816c94 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -61,7 +61,7 @@ def get_root() -> str: 'git failed. Is it installed, and are you in a Git repository ' 'directory?', ) - if os.path.commonpath((root, git_dir)) == git_dir: + if os.path.samefile(root, git_dir): raise FatalError( 'git toplevel unexpectedly empty! make sure you are not ' 'inside the `.git` directory of your repository.', diff --git a/tests/git_test.py b/tests/git_test.py index fafd4a6e3..69fd2067a 100644 --- a/tests/git_test.py +++ b/tests/git_test.py @@ -3,6 +3,7 @@ import pytest from pre_commit import git +from pre_commit.error_handler import FatalError from pre_commit.util import cmd_output from testing.util import git_commit @@ -18,6 +19,25 @@ def test_get_root_deeper(in_git_dir): assert os.path.normcase(git.get_root()) == expected +def test_in_exactly_dot_git(in_git_dir): + with in_git_dir.join('.git').as_cwd(), pytest.raises(FatalError): + git.get_root() + + +def test_get_root_bare_worktree(tmpdir): + src = tmpdir.join('src').ensure_dir() + cmd_output('git', 'init', str(src)) + git_commit(cwd=str(src)) + + bare = tmpdir.join('bare.git').ensure_dir() + cmd_output('git', 'clone', '--bare', str(src), str(bare)) + + cmd_output('git', 'worktree', 'add', 'foo', 'HEAD', cwd=bare) + + with bare.join('foo').as_cwd(): + assert git.get_root() == os.path.abspath('.') + + def test_get_staged_files_deleted(in_git_dir): in_git_dir.join('test').ensure() cmd_output('git', 'add', 'test') diff --git a/tests/main_test.py b/tests/main_test.py index 6738df683..2460bd85a 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -35,11 +35,6 @@ def test_adjust_args_and_chdir_not_in_git_dir(in_tmpdir): main._adjust_args_and_chdir(_args()) -def test_adjust_args_and_chdir_in_dot_git_dir(in_git_dir): - with in_git_dir.join('.git').as_cwd(), pytest.raises(FatalError): - main._adjust_args_and_chdir(_args()) - - def test_adjust_args_and_chdir_noop(in_git_dir): args = _args(command='run', files=['f1', 'f2']) main._adjust_args_and_chdir(args) From c67ba85311be53f4f0f830be22bc153524e07d03 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 27 Jan 2021 12:47:08 -0800 Subject: [PATCH 087/129] v2.10.0 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 24 ++++++++++++++++++++++++ setup.cfg | 2 +- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cd5bd2637..321e83962 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.9.3 + rev: v2.10.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index c85c2c81c..1ba7ffadd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +2.10.0 - 2021-01-27 +=================== + +### Features +- Allow `ci` as a top-level map for configuration for https://pre-commit.ci + - #1735 PR by @asottile. +- Add warning for mutable `rev` in configuration + - #1715 PR by @paulhfischer. + - #974 issue by @asottile. +- Add warning for `/*` in top-level `files` / `exclude` regexes + - #1750 PR by @paulhfischer. + - #1702 issue by @asottile. +- Expose `PRE_COMMIT_REMOTE_BRANCH` environment variable during `pre-push` + hooks + - #1770 PR by @surafelabebe. +- Produce error message for `language` / `language_version` for non-installable + languages + - #1771 PR by @asottile. + +### Fixes +- Fix execution in worktrees in subdirectories of bare repositories + - #1778 PR by @asottile. + - #1777 issue by @s0undt3ch. + 2.9.3 - 2020-12-07 ================== diff --git a/setup.cfg b/setup.cfg index 2e77fcf4e..913344bed 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.9.3 +version = 2.10.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 5e7c6eb31e1572a39661cd8cfe0f2866182ef75a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 1 Feb 2021 16:48:53 +0000 Subject: [PATCH 088/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 321e83962..66c04837e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.7.4 + rev: v2.9.0 hooks: - id: pyupgrade args: [--py36-plus] From 34e0ff349723310e954ddc25a528237cc769c66b Mon Sep 17 00:00:00 2001 From: Paul Fischer Date: Sat, 6 Feb 2021 19:03:57 +0100 Subject: [PATCH 089/129] added recursive repository support for golang --- pre_commit/languages/golang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/golang.py b/pre_commit/languages/golang.py index 91ade1e99..d6165d95e 100644 --- a/pre_commit/languages/golang.py +++ b/pre_commit/languages/golang.py @@ -69,7 +69,8 @@ def install_environment( repo_src_dir = os.path.join(directory, 'src', guess_go_dir(remote)) # Clone into the goenv we'll create - helpers.run_setup_cmd(prefix, ('git', 'clone', '.', repo_src_dir)) + cmd = ('git', 'clone', '--recursive', '.', repo_src_dir) + helpers.run_setup_cmd(prefix, cmd) if sys.platform == 'cygwin': # pragma: no cover _, gopath, _ = cmd_output('cygpath', '-w', directory) From 833bbf7186bbcb3940e08904c24f206b6c77918f Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 6 Feb 2021 12:50:30 -0800 Subject: [PATCH 090/129] add test for recursive submodules for golang --- tests/repository_test.py | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/repository_test.py b/tests/repository_test.py index 8540db3ce..1b58164cb 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -10,6 +10,7 @@ import re_assert import pre_commit.constants as C +from pre_commit import git from pre_commit.clientlib import CONFIG_SCHEMA from pre_commit.clientlib import load_manifest from pre_commit.envcontext import envcontext @@ -346,6 +347,59 @@ def test_golang_hook_still_works_when_gobin_is_set(tempdir_factory, store): assert os.listdir(gobin_dir) == [] +def test_golang_with_recursive_submodule(tmpdir, tempdir_factory, store): + sub_go = '''\ +package sub + +import "fmt" + +func Func() { + fmt.Println("hello hello world") +} +''' + sub = tmpdir.join('sub').ensure_dir() + sub.join('sub.go').write(sub_go) + cmd_output('git', '-C', str(sub), 'init', '.') + cmd_output('git', '-C', str(sub), 'add', '.') + git.commit(str(sub)) + + pre_commit_hooks = '''\ +- id: example + name: example + entry: example + language: golang + verbose: true +''' + go_mod = '''\ +module github.com/asottile/example + +go 1.14 +''' + main_go = '''\ +package main + +import "github.com/asottile/example/sub" + +func main() { + sub.Func() +} +''' + repo = tmpdir.join('repo').ensure_dir() + repo.join('.pre-commit-hooks.yaml').write(pre_commit_hooks) + repo.join('go.mod').write(go_mod) + repo.join('main.go').write(main_go) + cmd_output('git', '-C', str(repo), 'init', '.') + cmd_output('git', '-C', str(repo), 'add', '.') + cmd_output('git', '-C', str(repo), 'submodule', 'add', str(sub), 'sub') + git.commit(str(repo)) + + config = make_config_from_repo(str(repo)) + hook = _get_hook(config, store, 'example') + ret, out = _hook_run(hook, (), color=False) + assert ret == 0 + assert _norm_out(out) == b'hello hello world\n' + + def test_rust_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'rust_hooks_repo', From 0047fa35dd463aabe85fbd55bbd97ee03479f34c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 6 Feb 2021 13:21:12 -0800 Subject: [PATCH 091/129] v2.10.1 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 8 ++++++++ setup.cfg | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 66c04837e..6cc66ebc3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.10.0 + rev: v2.10.1 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ba7ffadd..c8af449d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +2.10.1 - 2021-02-06 +=================== + +### Fixes +- Fix `language: golang` repositories containing recursive submodules + - #1788 issue by @gaurav517. + - #1789 PR by @paulhfischer. + 2.10.0 - 2021-01-27 =================== diff --git a/setup.cfg b/setup.cfg index 913344bed..7e4a1c4a4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.10.0 +version = 2.10.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 0cd8cbc83daa82dab68df2d821e650e0499af14e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 8 Feb 2021 16:48:57 +0000 Subject: [PATCH 092/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6cc66ebc3..95a8210c6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,12 +25,12 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.9.0 + rev: v2.10.0 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/asottile/reorder_python_imports - rev: v2.3.6 + rev: v2.4.0 hooks: - id: reorder-python-imports args: [--py3-plus] From c024147ede0f114bd4b1149a91d5c77793b8419a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Feb 2021 17:03:19 +0000 Subject: [PATCH 093/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 95a8210c6..75d706663 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,7 +44,7 @@ repos: hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.800 + rev: v0.812 hooks: - id: mypy exclude: ^testing/resources/ From 3d31858ee3c92a58f02438c969c76630641981b1 Mon Sep 17 00:00:00 2001 From: "Jam M. Hernandez Quiceno" Date: Sat, 20 Feb 2021 17:40:38 -0500 Subject: [PATCH 094/129] Instruct users how to prevent a mutable rev in repo warning. --- pre_commit/clientlib.py | 3 ++- tests/clientlib_test.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 8f35057d2..962c7fa8f 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -128,7 +128,8 @@ def check(self, dct: Dict[str, Any]) -> None: f'(moving tag / branch). Mutable references are never ' f'updated after first install and are not supported. ' f'See https://pre-commit.com/#using-the-latest-version-for-a-repository ' # noqa: E501 - f'for more details.', + f'for more details. ' + f'Hint: `pre-commit autoupdate` often fixes this.', ) diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index 6bdb0d624..ff3cce38d 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -228,7 +228,8 @@ def test_warn_mutable_rev_invalid(caplog, rev): 'Mutable references are never updated after first install and are ' 'not supported. ' 'See https://pre-commit.com/#using-the-latest-version-for-a-repository ' # noqa: E501 - 'for more details.', + 'for more details. ' + 'Hint: `pre-commit autoupdate` often fixes this.', ), ] From 87dccbb8dc1190a6c7f54499165e3a73997f5c07 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 23 Feb 2021 18:22:12 -0800 Subject: [PATCH 095/129] fix _path_without_us under test when path segment ends in slash --- tests/commands/install_uninstall_test.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py index 7a4b90635..36615d11f 100644 --- a/tests/commands/install_uninstall_test.py +++ b/tests/commands/install_uninstall_test.py @@ -259,7 +259,10 @@ def _path_without_us(): exe = find_executable('pre-commit', _environ=env) while exe: parts = env['PATH'].split(os.pathsep) - after = [x for x in parts if x.lower() != os.path.dirname(exe).lower()] + after = [ + x for x in parts + if x.lower().rstrip(os.sep) != os.path.dirname(exe).lower() + ] if parts == after: raise AssertionError(exe, parts) env['PATH'] = os.pathsep.join(after) From f9fbe18abf44a55fb6a67b9601053fcee8979d12 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 23 Feb 2021 18:52:24 -0800 Subject: [PATCH 096/129] Fix pre-commit install on subst drives --- pre_commit/git.py | 4 ++-- tests/main_test.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pre_commit/git.py b/pre_commit/git.py index bec816c94..4bf282357 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -52,10 +52,10 @@ def get_root() -> str: # "rev-parse --show-cdup" to get the appropriate path, but must perform # an extra check to see if we are in the .git directory. try: - root = os.path.realpath( + root = os.path.abspath( cmd_output('git', 'rev-parse', '--show-cdup')[1].strip(), ) - git_dir = os.path.realpath(get_git_dir()) + git_dir = os.path.abspath(get_git_dir()) except CalledProcessError: raise FatalError( 'git failed. Is it installed, and are you in a Git repository ' diff --git a/tests/main_test.py b/tests/main_test.py index 2460bd85a..1ad8d418e 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -7,7 +7,9 @@ import pre_commit.constants as C from pre_commit import main from pre_commit.errors import FatalError +from pre_commit.util import cmd_output from testing.auto_namedtuple import auto_namedtuple +from testing.util import cwd @pytest.mark.parametrize( @@ -54,6 +56,17 @@ def test_adjust_args_and_chdir_relative_things(in_git_dir): assert args.files == [os.path.join('foo', 'f1'), os.path.join('foo', 'f2')] +@pytest.mark.skipif(os.name != 'nt', reason='windows feature') +def test_install_on_subst(in_git_dir, store): # pragma: posix no cover + assert not os.path.exists('Z:') + cmd_output('subst', 'Z:', str(in_git_dir)) + try: + with cwd('Z:'): + test_adjust_args_and_chdir_noop('Z:\\') + finally: + cmd_output('subst', '/d', 'Z:') + + def test_adjust_args_and_chdir_non_relative_config(in_git_dir): in_git_dir.join('foo').ensure_dir().chdir() From 6b73138c73efd0cb5bc923d7bdabfcd9ae36e6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Sacawa?= Date: Thu, 21 Jan 2021 06:26:20 -0500 Subject: [PATCH 097/129] Add: post-merge hook support --- pre_commit/commands/hook_impl.py | 5 +++ pre_commit/commands/run.py | 5 ++- pre_commit/constants.py | 2 +- pre_commit/main.py | 11 +++++-- testing/util.py | 2 ++ tests/commands/hook_impl_test.py | 9 +++++ tests/commands/install_uninstall_test.py | 42 ++++++++++++++++++++++++ tests/commands/run_test.py | 9 +++++ tests/repository_test.py | 2 +- 9 files changed, 82 insertions(+), 5 deletions(-) diff --git a/pre_commit/commands/hook_impl.py b/pre_commit/commands/hook_impl.py index 25c5fdffd..a766ee9d6 100644 --- a/pre_commit/commands/hook_impl.py +++ b/pre_commit/commands/hook_impl.py @@ -76,6 +76,7 @@ def _ns( remote_url: Optional[str] = None, commit_msg_filename: Optional[str] = None, checkout_type: Optional[str] = None, + is_squash_merge: Optional[str] = None, ) -> argparse.Namespace: return argparse.Namespace( color=color, @@ -88,6 +89,7 @@ def _ns( commit_msg_filename=commit_msg_filename, all_files=all_files, checkout_type=checkout_type, + is_squash_merge=is_squash_merge, files=(), hook=None, verbose=False, @@ -158,6 +160,7 @@ def _pre_push_ns( 'post-commit': 0, 'pre-commit': 0, 'pre-merge-commit': 0, + 'post-merge': 1, 'pre-push': 2, } @@ -199,6 +202,8 @@ def _run_ns( hook_type, color, from_ref=args[0], to_ref=args[1], checkout_type=args[2], ) + elif hook_type == 'post-merge': + return _ns(hook_type, color, is_squash_merge=args[0]) else: raise AssertionError(f'unexpected hook type: {hook_type}') diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 891488d59..05c3268e3 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -245,7 +245,7 @@ def _compute_cols(hooks: Sequence[Hook]) -> int: def _all_filenames(args: argparse.Namespace) -> Collection[str]: # these hooks do not operate on files - if args.hook_stage in {'post-checkout', 'post-commit'}: + if args.hook_stage in {'post-checkout', 'post-commit', 'post-merge'}: return () elif args.hook_stage in {'prepare-commit-msg', 'commit-msg'}: return (args.commit_msg_filename,) @@ -379,6 +379,9 @@ def run( if args.checkout_type: environ['PRE_COMMIT_CHECKOUT_TYPE'] = args.checkout_type + if args.is_squash_merge: + environ['PRE_COMMIT_IS_SQUASH_MERGE'] = args.is_squash_merge + # Set pre_commit flag environ['PRE_COMMIT'] = '1' diff --git a/pre_commit/constants.py b/pre_commit/constants.py index 5150fdcf4..3dcbbaca3 100644 --- a/pre_commit/constants.py +++ b/pre_commit/constants.py @@ -18,7 +18,7 @@ # `manual` is not invoked by any installed git hook. See #719 STAGES = ( 'commit', 'merge-commit', 'prepare-commit-msg', 'commit-msg', - 'post-commit', 'manual', 'post-checkout', 'push', + 'post-commit', 'manual', 'post-checkout', 'push', 'post-merge', ) DEFAULT = 'default' diff --git a/pre_commit/main.py b/pre_commit/main.py index ce850c45c..c66cfb9a4 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -67,8 +67,8 @@ def __call__( def _add_hook_type_option(parser: argparse.ArgumentParser) -> None: parser.add_argument( '-t', '--hook-type', choices=( - 'pre-commit', 'pre-merge-commit', 'pre-push', - 'prepare-commit-msg', 'commit-msg', 'post-commit', 'post-checkout', + 'pre-commit', 'pre-merge-commit', 'pre-push', 'prepare-commit-msg', + 'commit-msg', 'post-commit', 'post-checkout', 'post-merge', ), action=AppendReplaceDefault, default=['pre-commit'], @@ -136,6 +136,13 @@ def _add_run_options(parser: argparse.ArgumentParser) -> None: 'file from the index, flag=0).' ), ) + parser.add_argument( + '--is-squash-merge', + help=( + 'During a post-merge hook, indicates whether the merge was a ' + 'squash merge' + ), + ) def _adjust_args_and_chdir(args: argparse.Namespace) -> None: diff --git a/testing/util.py b/testing/util.py index 1f8cb35d2..13644531d 100644 --- a/testing/util.py +++ b/testing/util.py @@ -70,6 +70,7 @@ def run_opts( show_diff_on_failure=False, commit_msg_filename='', checkout_type='', + is_squash_merge='', ): # These are mutually exclusive assert not (all_files and files) @@ -88,6 +89,7 @@ def run_opts( show_diff_on_failure=show_diff_on_failure, commit_msg_filename=commit_msg_filename, checkout_type=checkout_type, + is_squash_merge=is_squash_merge, ) diff --git a/tests/commands/hook_impl_test.py b/tests/commands/hook_impl_test.py index 2fc014686..c38b9caa1 100644 --- a/tests/commands/hook_impl_test.py +++ b/tests/commands/hook_impl_test.py @@ -97,6 +97,7 @@ def call(*_, **__): ('pre-push', ['branch_name', 'remote_name']), ('commit-msg', ['.git/COMMIT_EDITMSG']), ('post-commit', []), + ('post-merge', ['1']), ('post-checkout', ['old_head', 'new_head', '1']), # multiple choices for commit-editmsg ('prepare-commit-msg', ['.git/COMMIT_EDITMSG']), @@ -157,6 +158,14 @@ def test_run_ns_post_commit(): assert ns.color is True +def test_run_ns_post_merge(): + ns = hook_impl._run_ns('post-merge', True, ('1',), b'') + assert ns is not None + assert ns.hook_stage == 'post-merge' + assert ns.color is True + assert ns.is_squash_merge == '1' + + def test_run_ns_post_checkout(): ns = hook_impl._run_ns('post-checkout', True, ('a', 'b', 'c'), b'') assert ns is not None diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py index 7a4b90635..c7d392ab8 100644 --- a/tests/commands/install_uninstall_test.py +++ b/tests/commands/install_uninstall_test.py @@ -759,6 +759,48 @@ def test_post_commit_integration(tempdir_factory, store): assert os.path.exists('post-commit.tmp') +def test_post_merge_integration(tempdir_factory, store): + path = git_dir(tempdir_factory) + config = [ + { + 'repo': 'local', + 'hooks': [{ + 'id': 'post-merge', + 'name': 'Post merge', + 'entry': 'touch post-merge.tmp', + 'language': 'system', + 'always_run': True, + 'verbose': True, + 'stages': ['post-merge'], + }], + }, + ] + write_config(path, config) + with cwd(path): + # create a simple diamond of commits for a non-trivial merge + open('init', 'a').close() + cmd_output('git', 'add', '.') + git_commit() + + open('master', 'a').close() + cmd_output('git', 'add', '.') + git_commit() + + cmd_output('git', 'checkout', '-b', 'branch', 'HEAD^') + open('branch', 'a').close() + cmd_output('git', 'add', '.') + git_commit() + + cmd_output('git', 'checkout', 'master') + install(C.CONFIG_FILE, store, hook_types=['post-merge']) + retc, stdout, stderr = cmd_output_mocked_pre_commit_home( + 'git', 'merge', 'branch', + tempdir_factory=tempdir_factory, + ) + assert retc == 0 + assert os.path.exists('post-merge.tmp') + + def test_post_checkout_integration(tempdir_factory, store): path = git_dir(tempdir_factory) config = [ diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index eaea8137c..4cd70fd43 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -494,6 +494,15 @@ def test_all_push_options_ok(cap_out, store, repo_with_passing_hook): assert b'Specify both --from-ref and --to-ref.' not in printed +def test_is_squash_merge(cap_out, store, repo_with_passing_hook): + args = run_opts(is_squash_merge='1') + environ: MutableMapping[str, str] = {} + ret, printed = _do_run( + cap_out, store, repo_with_passing_hook, args, environ, + ) + assert environ['PRE_COMMIT_IS_SQUASH_MERGE'] == '1' + + def test_checkout_type(cap_out, store, repo_with_passing_hook): args = run_opts(from_ref='', to_ref='', checkout_type='1') environ: MutableMapping[str, str] = {} diff --git a/tests/repository_test.py b/tests/repository_test.py index 1b58164cb..da678a32b 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -953,7 +953,7 @@ def test_manifest_hooks(tempdir_factory, store): require_serial=False, stages=( 'commit', 'merge-commit', 'prepare-commit-msg', 'commit-msg', - 'post-commit', 'manual', 'post-checkout', 'push', + 'post-commit', 'manual', 'post-checkout', 'push', 'post-merge', ), types=['file'], types_or=[], From fe1f56c08f6432cf281df797780d56992e7f9cca Mon Sep 17 00:00:00 2001 From: Rafik Draoui Date: Thu, 25 Feb 2021 19:11:21 -0400 Subject: [PATCH 098/129] Add support for Go 1.16 Go 1.16 changes the way modules are handled. It now expects Go projects to have non-empty `go.mod` files. This change is compatible with Go 1.15. Fixes #1815 --- pre_commit/resources/empty_template_go.mod | 1 + testing/resources/golang_hooks_repo/go.mod | 1 + 2 files changed, 2 insertions(+) create mode 100644 testing/resources/golang_hooks_repo/go.mod diff --git a/pre_commit/resources/empty_template_go.mod b/pre_commit/resources/empty_template_go.mod index e69de29bb..de3e24157 100644 --- a/pre_commit/resources/empty_template_go.mod +++ b/pre_commit/resources/empty_template_go.mod @@ -0,0 +1 @@ +module pre-commit-dummy-empty-module diff --git a/testing/resources/golang_hooks_repo/go.mod b/testing/resources/golang_hooks_repo/go.mod new file mode 100644 index 000000000..523bfc9f5 --- /dev/null +++ b/testing/resources/golang_hooks_repo/go.mod @@ -0,0 +1 @@ +module golang-hello-world From f1502119a2110ec858b9780eb6a6c04d28e5be6a Mon Sep 17 00:00:00 2001 From: Lorenz Date: Thu, 4 Feb 2021 00:22:44 +0100 Subject: [PATCH 099/129] add support for R via renv --- azure-pipelines.yml | 8 + pre_commit/languages/all.py | 2 + pre_commit/languages/r.py | 141 ++++++++++++++++++ pre_commit/resources/empty_template_renv.lock | 20 +++ pre_commit/store.py | 2 +- testing/gen-languages-all | 6 +- testing/get-r.ps1 | 6 + testing/get-r.sh | 9 ++ .../r_hooks_repo/.pre-commit-hooks.yaml | 48 ++++++ testing/resources/r_hooks_repo/DESCRIPTION | 19 +++ .../resources/r_hooks_repo/additional-deps.R | 2 + testing/resources/r_hooks_repo/hello-world.R | 5 + testing/resources/r_hooks_repo/renv.lock | 27 ++++ tests/languages/r_test.py | 104 +++++++++++++ tests/repository_test.py | 48 ++++++ 15 files changed, 443 insertions(+), 4 deletions(-) create mode 100644 pre_commit/languages/r.py create mode 100644 pre_commit/resources/empty_template_renv.lock create mode 100644 testing/get-r.ps1 create mode 100755 testing/get-r.sh create mode 100644 testing/resources/r_hooks_repo/.pre-commit-hooks.yaml create mode 100644 testing/resources/r_hooks_repo/DESCRIPTION create mode 100755 testing/resources/r_hooks_repo/additional-deps.R create mode 100755 testing/resources/r_hooks_repo/hello-world.R create mode 100644 testing/resources/r_hooks_repo/renv.lock create mode 100644 tests/languages/r_test.py diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e7256da18..34ace234e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -26,6 +26,10 @@ jobs: Write-Host "##vso[task.prependpath]C:\Strawberry\perl\site\bin" Write-Host "##vso[task.prependpath]C:\Strawberry\c\bin" displayName: Add strawberry perl to PATH + - task: PowerShell@2 + inputs: + filePath: "testing/get-r.ps1" + displayName: install R - template: job--python-tox.yml@asottile parameters: toxenvs: [py37] @@ -42,6 +46,8 @@ jobs: testing/get-swift.sh echo '##vso[task.prependpath]/tmp/swift/usr/bin' displayName: install swift + - bash: testing/get-r.sh + displayName: install R - template: job--python-tox.yml@asottile parameters: toxenvs: [pypy3, py36, py37, py38, py39] @@ -56,3 +62,5 @@ jobs: testing/get-swift.sh echo '##vso[task.prependpath]/tmp/swift/usr/bin' displayName: install swift + - bash: testing/get-r.sh + displayName: install R diff --git a/pre_commit/languages/all.py b/pre_commit/languages/all.py index 9c2e59d78..fde6000cb 100644 --- a/pre_commit/languages/all.py +++ b/pre_commit/languages/all.py @@ -16,6 +16,7 @@ from pre_commit.languages import perl from pre_commit.languages import pygrep from pre_commit.languages import python +from pre_commit.languages import r from pre_commit.languages import ruby from pre_commit.languages import rust from pre_commit.languages import script @@ -52,6 +53,7 @@ class Language(NamedTuple): 'perl': Language(name='perl', ENVIRONMENT_DIR=perl.ENVIRONMENT_DIR, get_default_version=perl.get_default_version, healthy=perl.healthy, install_environment=perl.install_environment, run_hook=perl.run_hook), # noqa: E501 'pygrep': Language(name='pygrep', ENVIRONMENT_DIR=pygrep.ENVIRONMENT_DIR, get_default_version=pygrep.get_default_version, healthy=pygrep.healthy, install_environment=pygrep.install_environment, run_hook=pygrep.run_hook), # noqa: E501 'python': Language(name='python', ENVIRONMENT_DIR=python.ENVIRONMENT_DIR, get_default_version=python.get_default_version, healthy=python.healthy, install_environment=python.install_environment, run_hook=python.run_hook), # noqa: E501 + 'r': Language(name='r', ENVIRONMENT_DIR=r.ENVIRONMENT_DIR, get_default_version=r.get_default_version, healthy=r.healthy, install_environment=r.install_environment, run_hook=r.run_hook), # noqa: E501 'ruby': Language(name='ruby', ENVIRONMENT_DIR=ruby.ENVIRONMENT_DIR, get_default_version=ruby.get_default_version, healthy=ruby.healthy, install_environment=ruby.install_environment, run_hook=ruby.run_hook), # noqa: E501 'rust': Language(name='rust', ENVIRONMENT_DIR=rust.ENVIRONMENT_DIR, get_default_version=rust.get_default_version, healthy=rust.healthy, install_environment=rust.install_environment, run_hook=rust.run_hook), # noqa: E501 'script': Language(name='script', ENVIRONMENT_DIR=script.ENVIRONMENT_DIR, get_default_version=script.get_default_version, healthy=script.healthy, install_environment=script.install_environment, run_hook=script.run_hook), # noqa: E501 diff --git a/pre_commit/languages/r.py b/pre_commit/languages/r.py new file mode 100644 index 000000000..1d42fea2d --- /dev/null +++ b/pre_commit/languages/r.py @@ -0,0 +1,141 @@ +import contextlib +import os +import shlex +import shutil +from typing import Generator +from typing import Sequence +from typing import Tuple + +from pre_commit.envcontext import envcontext +from pre_commit.envcontext import PatchesT +from pre_commit.hook import Hook +from pre_commit.languages import helpers +from pre_commit.prefix import Prefix +from pre_commit.util import clean_path_on_failure +from pre_commit.util import cmd_output_b + +ENVIRONMENT_DIR = 'renv' +get_default_version = helpers.basic_get_default_version +healthy = helpers.basic_healthy + + +def get_env_patch(venv: str) -> PatchesT: + return ( + ('R_PROFILE_USER', os.path.join(venv, 'activate.R')), + ) + + +@contextlib.contextmanager +def in_env( + prefix: Prefix, + language_version: str, +) -> Generator[None, None, None]: + envdir = _get_env_dir(prefix, language_version) + with envcontext(get_env_patch(envdir)): + yield + + +def _get_env_dir(prefix: Prefix, version: str) -> str: + return prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) + + +def _prefix_if_file_entry( + entry: Sequence[str], + prefix: Prefix, +) -> Sequence[str]: + if entry[1] == '-e': + return entry[1:] + else: + return (prefix.path(entry[1]),) + + +def _entry_validate(entry: Sequence[str]) -> None: + """ + Allowed entries: + # Rscript -e expr + # Rscript path/to/file + """ + if entry[0] != 'Rscript': + raise ValueError('entry must start with `Rscript`.') + + if entry[1] == '-e': + if len(entry) > 3: + raise ValueError('You can supply at most one expression.') + elif len(entry) > 2: + raise ValueError( + 'The only valid syntax is `Rscript -e {expr}`', + 'or `Rscript path/to/hook/script`', + ) + + +def _cmd_from_hook(hook: Hook) -> Tuple[str, ...]: + opts = ('--no-save', '--no-restore', '--no-site-file', '--no-environ') + entry = shlex.split(hook.entry) + _entry_validate(entry) + + return ( + *entry[:1], *opts, + *_prefix_if_file_entry(entry, hook.prefix), + *hook.args, + ) + + +def install_environment( + prefix: Prefix, + version: str, + additional_dependencies: Sequence[str], +) -> None: + env_dir = _get_env_dir(prefix, version) + with clean_path_on_failure(env_dir): + os.makedirs(env_dir, exist_ok=True) + path_desc_source = prefix.path('DESCRIPTION') + if os.path.exists(path_desc_source): + shutil.copy(path_desc_source, env_dir) + shutil.copy(prefix.path('renv.lock'), env_dir) + cmd_output_b( + 'Rscript', '--vanilla', '-e', + """\ + missing_pkgs <- setdiff( + "renv", unname(installed.packages()[, "Package"]) + ) + options( + repos = c(CRAN = "https://cran.rstudio.com"), + renv.consent = TRUE + ) + install.packages(missing_pkgs) + renv::activate() + renv::restore() + activate_statement <- paste0( + 'renv::activate("', file.path(getwd()), '"); ' + ) + writeLines(activate_statement, 'activate.R') + is_package <- tryCatch( + suppressWarnings( + unname(read.dcf('DESCRIPTION')[,'Type'] == "Package") + ), + error = function(...) FALSE + ) + if (is_package) { + renv::install(normalizePath('.')) + } + """, + cwd=env_dir, + ) + if additional_dependencies: + cmd_output_b( + 'Rscript', '-e', + 'renv::install(commandArgs(trailingOnly = TRUE))', + *additional_dependencies, + cwd=env_dir, + ) + + +def run_hook( + hook: Hook, + file_args: Sequence[str], + color: bool, +) -> Tuple[int, bytes]: + with in_env(hook.prefix, hook.language_version): + return helpers.run_xargs( + hook, _cmd_from_hook(hook), file_args, color=color, + ) diff --git a/pre_commit/resources/empty_template_renv.lock b/pre_commit/resources/empty_template_renv.lock new file mode 100644 index 000000000..d6e31f86c --- /dev/null +++ b/pre_commit/resources/empty_template_renv.lock @@ -0,0 +1,20 @@ +{ + "R": { + "Version": "4.0.3", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cran.rstudio.com" + } + ] + }, + "Packages": { + "renv": { + "Package": "renv", + "Version": "0.12.5", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "5c0cdb37f063c58cdab3c7e9fbb8bd2c" + } + } +} diff --git a/pre_commit/store.py b/pre_commit/store.py index e5522ec33..187c9d353 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -189,7 +189,7 @@ def _git_cmd(*args: str) -> None: LOCAL_RESOURCES = ( 'Cargo.toml', 'main.go', 'go.mod', 'main.rs', '.npmignore', 'package.json', 'pre_commit_dummy_package.gemspec', 'setup.py', - 'environment.yml', 'Makefile.PL', + 'environment.yml', 'Makefile.PL', 'renv.lock', ) def make_local(self, deps: Sequence[str]) -> str: diff --git a/testing/gen-languages-all b/testing/gen-languages-all index d9b01bd04..eb7cd701e 100755 --- a/testing/gen-languages-all +++ b/testing/gen-languages-all @@ -2,9 +2,9 @@ import sys LANGUAGES = [ - 'conda', 'coursier', 'docker', 'dotnet', 'docker_image', 'fail', 'golang', - 'node', 'perl', 'pygrep', 'python', 'ruby', 'rust', 'script', 'swift', - 'system', + 'conda', 'coursier', 'docker', 'docker_image', 'dotnet', 'fail', 'golang', + 'node', 'perl', 'pygrep', 'python', 'r', 'ruby', 'rust', 'script', + 'swift', 'system', ] FIELDS = [ 'ENVIRONMENT_DIR', 'get_default_version', 'healthy', 'install_environment', diff --git a/testing/get-r.ps1 b/testing/get-r.ps1 new file mode 100644 index 000000000..e7b7b6195 --- /dev/null +++ b/testing/get-r.ps1 @@ -0,0 +1,6 @@ +$dir = $Env:Temp +$urlR = "https://cran.r-project.org/bin/windows/base/old/4.0.4/R-4.0.4-win.exe" +$outputR = "$dir\R-win.exe" +$wcR = New-Object System.Net.WebClient +$wcR.DownloadFile($urlR, $outputR) +Start-Process -FilePath $outputR -ArgumentList "/S /v/qn" diff --git a/testing/get-r.sh b/testing/get-r.sh new file mode 100755 index 000000000..5d09828e4 --- /dev/null +++ b/testing/get-r.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +sudo apt install r-base +# create empty folder for user library. +# necessary for non-root users who have +# never installed an R package before. +# Alternatively, we require the renv +# package to be installed already, then we can +# omit that. +Rscript -e 'dir.create(Sys.getenv("R_LIBS_USER"), recursive = TRUE)' diff --git a/testing/resources/r_hooks_repo/.pre-commit-hooks.yaml b/testing/resources/r_hooks_repo/.pre-commit-hooks.yaml new file mode 100644 index 000000000..b3545d969 --- /dev/null +++ b/testing/resources/r_hooks_repo/.pre-commit-hooks.yaml @@ -0,0 +1,48 @@ +# parsing file +- id: parse-file-no-opts-no-args + name: Say hi + entry: Rscript parse-file-no-opts-no-args.R + language: r + types: [r] +- id: parse-file-no-opts-args + name: Say hi + entry: Rscript parse-file-no-opts-args.R + args: [--no-cache] + language: r + types: [r] +## parsing expr +- id: parse-expr-no-opts-no-args-1 + name: Say hi + entry: Rscript -e '1+1' + language: r + types: [r] +- id: parse-expr-args-in-entry-2 + name: Say hi + entry: Rscript -e '1+1' -e '3' --no-cache3 + language: r + types: [r] +# real world +- id: hello-world + name: Say hi + entry: Rscript hello-world.R + args: [blibla] + language: r + types: [r] +- id: hello-world-inline + name: Say hi + entry: | + Rscript -e + 'stopifnot( + packageVersion("rprojroot") == "1.0", + packageVersion("gli.clu") == "0.0.0.9000" + ) + cat(commandArgs(trailingOnly = TRUE), "from R!\n", sep = ", ") + ' + args: ['Hi-there'] + language: r + types: [r] +- id: additional-deps + name: Check additional deps + entry: Rscript additional-deps.R + language: r + types: [r] diff --git a/testing/resources/r_hooks_repo/DESCRIPTION b/testing/resources/r_hooks_repo/DESCRIPTION new file mode 100644 index 000000000..0e597a8a6 --- /dev/null +++ b/testing/resources/r_hooks_repo/DESCRIPTION @@ -0,0 +1,19 @@ +Package: gli.clu +Title: What the Package Does (One Line, Title Case) +Type: Package +Version: 0.0.0.9000 +Authors@R: + person(given = "First", + family = "Last", + role = c("aut", "cre"), + email = "first.last@example.com", + comment = c(ORCID = "YOUR-ORCID-ID")) +Description: What the package does (one paragraph). +License: `use_mit_license()`, `use_gpl3_license()` or friends to + pick a license +Encoding: UTF-8 +LazyData: true +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.1.1 +Imports: + rprojroot diff --git a/testing/resources/r_hooks_repo/additional-deps.R b/testing/resources/r_hooks_repo/additional-deps.R new file mode 100755 index 000000000..bc145951b --- /dev/null +++ b/testing/resources/r_hooks_repo/additional-deps.R @@ -0,0 +1,2 @@ +suppressPackageStartupMessages(library("cachem")) +cat("OK\n") diff --git a/testing/resources/r_hooks_repo/hello-world.R b/testing/resources/r_hooks_repo/hello-world.R new file mode 100755 index 000000000..bf8d92f42 --- /dev/null +++ b/testing/resources/r_hooks_repo/hello-world.R @@ -0,0 +1,5 @@ +stopifnot( + packageVersion('rprojroot') == '1.0', + packageVersion('gli.clu') == '0.0.0.9000' +) +cat("Hello, World, from R!\n") diff --git a/testing/resources/r_hooks_repo/renv.lock b/testing/resources/r_hooks_repo/renv.lock new file mode 100644 index 000000000..d7d5fdcc9 --- /dev/null +++ b/testing/resources/r_hooks_repo/renv.lock @@ -0,0 +1,27 @@ +{ + "R": { + "Version": "4.0.3", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + } + ] + }, + "Packages": { + "renv": { + "Package": "renv", + "Version": "0.12.5", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "5c0cdb37f063c58cdab3c7e9fbb8bd2c" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "1.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "86704667fe0860e4fec35afdfec137f3" + } + } +} diff --git a/tests/languages/r_test.py b/tests/languages/r_test.py new file mode 100644 index 000000000..5c046efed --- /dev/null +++ b/tests/languages/r_test.py @@ -0,0 +1,104 @@ +import os.path + +import pytest + +from pre_commit.languages import r +from testing.fixtures import make_config_from_repo +from testing.fixtures import make_repo +from tests.repository_test import _get_hook_no_install + + +def _test_r_parsing( + tempdir_factory, + store, + hook_id, + expected_hook_expr={}, + expected_args={}, +): + repo_path = 'r_hooks_repo' + path = make_repo(tempdir_factory, repo_path) + config = make_config_from_repo(path) + hook = _get_hook_no_install(config, store, hook_id) + ret = r._cmd_from_hook(hook) + expected_cmd = 'Rscript' + expected_opts = ( + '--no-save', '--no-restore', '--no-site-file', '--no-environ', + ) + expected_path = os.path.join( + hook.prefix.prefix_dir, '.'.join([hook_id, 'R']), + ) + expected = ( + expected_cmd, + *expected_opts, + *(expected_hook_expr or (expected_path,)), + *expected_args, + ) + assert ret == expected + + +def test_r_parsing_file_no_opts_no_args(tempdir_factory, store): + hook_id = 'parse-file-no-opts-no-args' + _test_r_parsing(tempdir_factory, store, hook_id) + + +def test_r_parsing_file_opts_no_args(tempdir_factory, store): + with pytest.raises(ValueError) as excinfo: + r._entry_validate(['Rscript', '--no-init', '/path/to/file']) + + msg = excinfo.value.args + assert msg == ( + 'The only valid syntax is `Rscript -e {expr}`', + 'or `Rscript path/to/hook/script`', + ) + + +def test_r_parsing_file_no_opts_args(tempdir_factory, store): + hook_id = 'parse-file-no-opts-args' + expected_args = ['--no-cache'] + _test_r_parsing( + tempdir_factory, store, hook_id, expected_args=expected_args, + ) + + +def test_r_parsing_expr_no_opts_no_args1(tempdir_factory, store): + hook_id = 'parse-expr-no-opts-no-args-1' + _test_r_parsing( + tempdir_factory, store, hook_id, expected_hook_expr=('-e', '1+1'), + ) + + +def test_r_parsing_expr_no_opts_no_args2(tempdir_factory, store): + with pytest.raises(ValueError) as execinfo: + r._entry_validate(['Rscript', '-e', '1+1', '-e', 'letters']) + msg = execinfo.value.args + assert msg == ('You can supply at most one expression.',) + + +def test_r_parsing_expr_opts_no_args2(tempdir_factory, store): + with pytest.raises(ValueError) as execinfo: + r._entry_validate( + [ + 'Rscript', '--vanilla', '-e', '1+1', '-e', 'letters', + ], + ) + msg = execinfo.value.args + assert msg == ( + 'The only valid syntax is `Rscript -e {expr}`', + 'or `Rscript path/to/hook/script`', + ) + + +def test_r_parsing_expr_args_in_entry2(tempdir_factory, store): + with pytest.raises(ValueError) as execinfo: + r._entry_validate(['Rscript', '-e', 'expr1', '--another-arg']) + + msg = execinfo.value.args + assert msg == ('You can supply at most one expression.',) + + +def test_r_parsing_expr_non_Rscirpt(tempdir_factory, store): + with pytest.raises(ValueError) as execinfo: + r._entry_validate(['AnotherScript', '-e', '{{}}']) + + msg = execinfo.value.args + assert msg == ('entry must start with `Rscript`.',) diff --git a/tests/repository_test.py b/tests/repository_test.py index da678a32b..b6f7fb254 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -279,6 +279,54 @@ def test_node_hook_with_npm_userconfig_set(tempdir_factory, store, tmpdir): test_run_a_node_hook(tempdir_factory, store) +def test_r_hook(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'r_hooks_repo', + 'hello-world', [os.devnull], + b'Hello, World, from R!\n', + ) + + +def test_r_inline_hook(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'r_hooks_repo', + 'hello-world-inline', ['some-file'], + b'Hi-there, some-file, from R!\n', + ) + + +def test_r_with_additional_dependencies_hook(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'r_hooks_repo', + 'additional-deps', [os.devnull], + b'OK\n', + config_kwargs={ + 'hooks': [{ + 'id': 'additional-deps', + 'additional_dependencies': ['cachem@1.0.4'], + }], + }, + ) + + +def test_r_local_with_additional_dependencies_hook(store): + config = { + 'repo': 'local', + 'hooks': [{ + 'id': 'local-r', + 'name': 'local-r', + 'entry': 'Rscript -e', + 'language': 'r', + 'args': ['if (packageVersion("R6") == "2.1.3") cat("OK\n")'], + 'additional_dependencies': ['R6@2.1.3'], + }], + } + hook = _get_hook(config, store, 'local-r') + ret, out = _hook_run(hook, (), color=False) + assert ret == 0 + assert _norm_out(out) == b'OK\n' + + def test_run_a_ruby_hook(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'ruby_hooks_repo', From 14d3af25ebc06da561e72e8a624919b7f8513f7c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 7 Mar 2021 14:43:32 -0800 Subject: [PATCH 100/129] add test for worktree inside of .git dir --- tests/git_test.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/git_test.py b/tests/git_test.py index 69fd2067a..51d5f8c43 100644 --- a/tests/git_test.py +++ b/tests/git_test.py @@ -38,6 +38,17 @@ def test_get_root_bare_worktree(tmpdir): assert git.get_root() == os.path.abspath('.') +def test_get_root_worktree_in_git(tmpdir): + src = tmpdir.join('src').ensure_dir() + cmd_output('git', 'init', str(src)) + git_commit(cwd=str(src)) + + cmd_output('git', 'worktree', 'add', '.git/trees/foo', 'HEAD', cwd=src) + + with src.join('.git/trees/foo').as_cwd(): + assert git.get_root() == os.path.abspath('.') + + def test_get_staged_files_deleted(in_git_dir): in_git_dir.join('test').ensure() cmd_output('git', 'add', 'test') From 54c49abbcb4b9fbf10865cc8e08f1628836a6088 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 7 Mar 2021 14:58:42 -0800 Subject: [PATCH 101/129] v2.11.0 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 20 ++++++++++++++++++++ setup.cfg | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 75d706663..2859e31f4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.10.1 + rev: v2.11.0 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index c8af449d3..eea586303 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +2.11.0 - 2021-03-07 +=================== + +### Features +- Improve warning for mutable ref. + - #1809 PR by @JamMarHer. +- Add support for `post-merge` hook. + - #1800 PR by @psacawa. + - #1762 issue by @psacawa. +- Add `r` as a supported hook language. + - #1799 PR by @lorenzwalthert. + +### Fixes +- Fix `pre-commit install` on `subst` / network drives on windows. + - #1814 PR by @asottile. + - #1802 issue by @goroderickgo. +- Fix installation of `local` golang repositories for go 1.16. + - #1818 PR by @rafikdraoui. + - #1815 issue by @rafikdraoui. + 2.10.1 - 2021-02-06 =================== diff --git a/setup.cfg b/setup.cfg index 7e4a1c4a4..5a4ee6e47 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.10.1 +version = 2.11.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From cf57e35e3753ebe62469998c3fbd6cf48acfc651 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Mon, 8 Mar 2021 16:21:36 +0100 Subject: [PATCH 102/129] install package from prefix_dir, not env_dir (which yields empty pkg) --- pre_commit/languages/r.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/pre_commit/languages/r.py b/pre_commit/languages/r.py index 1d42fea2d..83e600094 100644 --- a/pre_commit/languages/r.py +++ b/pre_commit/languages/r.py @@ -88,13 +88,11 @@ def install_environment( env_dir = _get_env_dir(prefix, version) with clean_path_on_failure(env_dir): os.makedirs(env_dir, exist_ok=True) - path_desc_source = prefix.path('DESCRIPTION') - if os.path.exists(path_desc_source): - shutil.copy(path_desc_source, env_dir) shutil.copy(prefix.path('renv.lock'), env_dir) cmd_output_b( 'Rscript', '--vanilla', '-e', - """\ + f"""\ + prefix_dir <- {prefix.prefix_dir!r} missing_pkgs <- setdiff( "renv", unname(installed.packages()[, "Package"]) ) @@ -109,15 +107,15 @@ def install_environment( 'renv::activate("', file.path(getwd()), '"); ' ) writeLines(activate_statement, 'activate.R') - is_package <- tryCatch( - suppressWarnings( - unname(read.dcf('DESCRIPTION')[,'Type'] == "Package") - ), + is_package <- tryCatch({{ + content_desc <- read.dcf(file.path(prefix_dir, 'DESCRIPTION')) + suppressWarnings(unname(content_desc[,'Type']) == "Package") + }}, error = function(...) FALSE ) - if (is_package) { - renv::install(normalizePath('.')) - } + if (is_package) {{ + renv::install(prefix_dir) + }} """, cwd=env_dir, ) From 8aec369df752dc6bfc498a96eb922f656244070b Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 9 Mar 2021 16:57:10 -0800 Subject: [PATCH 103/129] v2.11.1 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ setup.cfg | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2859e31f4..bcfde9093 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit - rev: v2.11.0 + rev: v2.11.1 hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade diff --git a/CHANGELOG.md b/CHANGELOG.md index eea586303..5da78662e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +2.11.1 - 2021-03-09 +=================== + +### Fixes +- Fix r hooks when hook repo is a package + - #1831 PR by @lorenzwalthert. + 2.11.0 - 2021-03-07 =================== diff --git a/setup.cfg b/setup.cfg index 5a4ee6e47..a14e95dbb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 2.11.0 +version = 2.11.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 74bbc72d28d67fcb8521d4b497ce318984e88bcb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 17:00:05 +0000 Subject: [PATCH 104/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bcfde9093..39eb73834 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,12 +12,12 @@ repos: - id: requirements-txt-fixer - id: double-quote-string-fixer - repo: https://gitlab.com/pycqa/flake8 - rev: 3.8.4 + rev: 3.9.0 hooks: - id: flake8 additional_dependencies: [flake8-typing-imports==1.10.0] - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: v1.5.4 + rev: v1.5.5 hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit @@ -40,7 +40,7 @@ repos: - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/setup-cfg-fmt - rev: v1.16.0 + rev: v1.17.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/pre-commit/mirrors-mypy From 4a440f67c85d88fee0fee582bde393072ddc32f1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 17:00:34 +0000 Subject: [PATCH 105/129] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- setup.cfg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.cfg b/setup.cfg index a14e95dbb..ceb1cd4c2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,6 +33,11 @@ install_requires = importlib-resources;python_version<"3.7" python_requires = >=3.6.1 +[options.packages.find] +exclude = + tests* + testing* + [options.entry_points] console_scripts = pre-commit = pre_commit.main:main @@ -45,11 +50,6 @@ pre_commit.resources = empty_template_* hook-tmpl -[options.packages.find] -exclude = - tests* - testing* - [bdist_wheel] universal = True From e8cb09f70f53f83637685b2da15acc74026567dc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 17:03:06 +0000 Subject: [PATCH 106/129] [pre-commit.ci] pre-commit autoupdate --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 39eb73834..b63d5a9ad 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: flake8 additional_dependencies: [flake8-typing-imports==1.10.0] - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: v1.5.5 + rev: v1.5.6 hooks: - id: autopep8 - repo: https://github.com/pre-commit/pre-commit @@ -25,7 +25,7 @@ repos: hooks: - id: validate_manifest - repo: https://github.com/asottile/pyupgrade - rev: v2.10.0 + rev: v2.11.0 hooks: - id: pyupgrade args: [--py36-plus] From 3bada745eab83ce19ecc683cce7d26d14d735e6d Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 22 Mar 2021 19:41:30 -0700 Subject: [PATCH 107/129] upgrade ruby-build --- pre_commit/resources/ruby-build.tar.gz | Bin 72807 -> 74163 bytes .../make_archives.py => testing/make-archives | 23 +++++---- tests/make_archives_test.py | 46 ------------------ 3 files changed, 11 insertions(+), 58 deletions(-) rename pre_commit/make_archives.py => testing/make-archives (75%) mode change 100644 => 100755 delete mode 100644 tests/make_archives_test.py diff --git a/pre_commit/resources/ruby-build.tar.gz b/pre_commit/resources/ruby-build.tar.gz index 4412ed40f48581b1c854711c49c8f991c2b0c4cf..c131f4a93a0af4f759bdf0cd15bcbfa6e5ed4aa5 100644 GIT binary patch literal 74163 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%0DX^HE0 z6->}qiR_`@lu{jqYzWK#X3`73|4+(Q5NP>{0CJiBvzYIo8UgNH*Pj)MlA4}u%sK2{ z_4>rz0axfrD;7v)XuM2iCIl<+W@qEPG(A>VIeN3?O1c8=tvP9*@>0B0Ik~^S1%v*Q zYWW0K(3vv`(^b%Na&w$%XNwktJot98dCT5iExp(sYm%roN1SN zX|frxSLzn5B@BfAC3eCw@Sb@xET|koC*hM|8G&Up)V~8;QJ`P1*j8?9n*D}khf$f(;$%$?ttJHu#eco3ottHe8OW>X3@IE4P!=wbslksQhx}hy+C7D>u3+n% zF)$F|g@F`Bof96+E~Xy7R?*Dl?>D^}pK3FH^C<(#YkJt`v=H0aB%ihfw6{=^18xkUjVxNo@iFf5AEl-UWi(P*d&?klmr<6MIgIL%y=GW~)Wq}`I*BfZoL#Z=exD;P|% zUKrP~h`O8ex`}RZ8lHWN#7Nv~$;lCd&`{3j*00taxYT=)`43x=L5(M8gMAk=NHH5xDy8f!!Cu@BwXE{ks}*)77CL!ooV@yGb}-d*w*xNMI)CBlp8$uI4Twwg zaprGEh(*kh2}oOBAbb*H=dnGi=&j`yJyh!@n5DeA`z=?4mkWRWo~5=%-0cSv4EYVZ zDqH8o?a#m}WB>6EXg>ng7-y_?%tO{1Vc(JRTIo%2uh^XG?IrywFL;sb0acxYl37`H zz^_kT47JArLG!ut)s-JW=6~P|e+W2ZMln(*U}F{u4ZXhy=DGkz-p+GwTJb(txpp>7 z-zP3zKU|^bnHM5QbE!(TU48~ z0M99e77V6oc&0wCeK=?RF!33u6^uwd+lfj4<20Stf<}1mwF#k(2JZ_`W}jV~@Tc&; zF3b5Z_iBx*s9%Jfmj;p!pc$P23%b*Nc)4++xY0INWjYrlucx=S=7qx6Lqh$y+tS}&lDyT-NVQC@m&W=Pkn5rbYRp2xgJmy)$BFEd-bb4y8QUwskM z_E<05@&^9Xe#7B+hJ~H?ME@2|<5nTflmJUe4*@@>z8V2jeXGr4Q8voSS@hL73SXD? zmkQvwJTv~<(q+d-wG-z%VNmO%;kf!2>1>ZoojM^;uruLVgnsCRG%kUAHd!sCa#?;+ z!kjg?A>5~S{(V<$3TxnP_$3xk^E7`jLhkG;xXu0r{g0{eq1<7*EVneL>kSf>f8o;UbO2ql#`9@M}7i2uGkr6^|G1vQkCo2M$%T z;p-1WTzLQ11Pb~=?z=PARVjg1BXIG&EDj+AP$VV^xh|Byq1|D z;xlT2Xr%Dq!2=9!`SGNw$#gHZYxmAtg;Dp$LYf4^5k#Y>BaTBV)?lYGQc|HmzyC9} zH55e43`Kqdwg@(%t7p*V^Fw9LTJVx{2_hCOxs*9e{*0Bo+0n?y<-h@A&-rBjeKGVPp= zJ(lI@Of*bgRWg*^i+^^>fqr*U{>$h|t$UsB=9_?PO3(Xm7>hdHrpbhhe*QnVG|k4i zPk<*F2oWZ;8$%BN-uQ%5Gj=*YO5q-Vt1pkJ-H(c$UCH<_>OMhrYc%q>ZxwQx=TGT0z=4=s!Q$!jGA(MnH;zz0Chd*PDk^)xH1YhD3x$ zBtzw?lvx>*(`0y3i82pIBvYmkg*FM5sh$cYon*|cOc6(fBJ-H(kj%r$c${gk-#V!G z`}us|zdyRJuB-MsYv1d>U-#>t*1qns_<;3dv=A#z*2bsBFze<&J$DVIdbg+RHJh7q z_h;m7KeOrpntWPes~w#HO9M1G0pQ68be9l`>4n^g6sH=~l4Hvj+U~c4x7Y-ywOw=S zE@BJV_vyyHO?}RJe~-fA5iEeeQUtDsK&cDt2QtGLTs62v$9`6hO!(*7-JiBE(r>z! zRX(K)1qNyLMq9NeoWzxNeh{`g+Q)AG2Mj>NB)CS0N@YuPg`fJn47!fZwV%J06`m=W zetF|wtLd@my!Jr-trCp~o=oo9DWjK`Rj_XgFl=#`ZX8fbUzgoHw($pei@M6R$IS`s zDXk}%R5kb;4z@n*Os>6wS6_@38H_XD?zuZi@_BOZ+D0;Ml%;El$Jnn^JRT3|WLnnsZ99=taKh=x)AwMtg+a|7C8VRS z3@~z`6K-qL2`|=Ggt`fwVQVbvnhiIL?FN`clt>Q@AWea7jaRBprio8^PJiQi9aE=m zP-h-Qde%mH_d$26@ossy=5EJr``$>63t$jA%@CRb$0K$})uzk<|pOxy4|{xmU^_}4z_XB2A^nd+jxwgluE)*+ALx@PcQy+(38 zH5HZAa8Ie7yzR%r4VThTJLWvjgeANUSH*IZ{7LY?%Hfv2oKL)1H4+LzwS9utlLpZ65&v3^6D$ zboAf?tj5X=BgYx1gegl@dOgY&rx4@9CUGT4=wp`Ea-kpfgo$SDj}z(2_C4x+B3GY- zgAh}jd?pztg8P?=T#v9^cDXU5?c`MPQ{BQVOZDvg2VRlVmrFn7UUc^o7JD+YXyg=jbcUa?NBdJ*lMcSslH9dI5;RdZ2K?!w!dob zWb;(KTI-V8U}V;e zuxnVnANDj!k2_&s^m_eV7EGv;fy7S=Xo>=H<6vno4Kn~jz|Iu2_jHXHK{p9}6*dqK7#b=V=eY@80 zPcPIwewH;XyHLZ5v~s*yB}X-Oxu6~OguOh?v-`APtyw>S-5P+wksBYC}aB%?F z_yy=bU+=>@2neGfVjhgqfY}0GtqPzOa{!G9^Lb*3DoQHBFO;JL;;nRnK%Xrc3Drw-*0D$yLqN2z`FT!R8ocEJ*ON) zD}17HTsLQ0kaOWIpR7D!80@NTjnKeTMoB;F^J-g4c))$_8Z~#X=hw~HD3$5$%a-1U z*lcHl-giy0X><8XD!*gC^cg*B^*e6+0&bhM`9N37!2ic9SO`Oh#H^$;m0JYs1V)UP zx{4zO8x9I=Ey>x*=_v`6%$zoKoQ*8kmAPEA=KkiAR={dJrA3Y+HiFPf7062PPXV?4 z_;$K){r07UZgIxenc_|g`4j4;?|q!IE!>=obw`^&sJ$j-v9WC-1tw(pbxy6f#La`I z733KO5q$yMst}h3kg5)V+A^*f@9qBMa8HF^=**=Xaz49kqC1@8ZTAG0F3N5R{nb-c zVO8sYsG2f11uN2PG4atAtVk*yc?pO)VC)+}d{I&FOwmfj*mZ^1(yL;2LNxx`0*her zTc4+2oog>Ecm3VjAGW+F`s-xDxx?>unK}G+Fud`W3ldD;#5>fm&#H}B&DOFhCuuVq zj=%^#%|L&@DpNDz$>zIqk(b$Rc{PDqym z*M->LBJb?kj2~%K`CT59?#dsRtb7{|Hw${-bbsHNA=Clt>egQ(pA3b87yV7t!AA!q z_4^%-nyRYLz1}SfeH`Om z)L}4$od^2p!s-edZ~`vF?g}QqlmDSe@F?q~LaSG%`ZMFZgw~f!|x0_m9 zU@tmGSp|_bH|_m&Yr(S-52DGQns>Qd%_Yn{I`&<>vZ(NP+{t*=iP%A9YHYXNr{7Ap zDu>l~ifTYq!od9Kmg@?<+a(K2QEt7PyrQWu!n-jA^cx)}cb{cQ&wW28>+Tkn7P>)g z6K%a~72xK<;Uxsq4w@*KqA}2B3A&mX9-lanD3(A7=;e_?2G9{XAh8z6ZyW*SdN0)tQ8y?Vel>FWi@cG1zXhS$MK={$>i?&{^ee^^+)yVE8d5HFE(7I66E&R(^kquNf2V{fjw zAVsb-D)EZZ?jFHL?Dt(z;}1 zhd%gB8`C6?0`?1#lZaLVMmbTP8r8Nu&gu8!z)@L(sgI1n)0b@fk>;xxxN@&Zb{d=S8p=Am#Z(QVW+b0jFsb>o)39R=oe+96Y zYUd>AfK;S_;h*(UOd3is8^>coj*^<8tg@KFOH*IxEb&f*vapR6FU&YHi_&G)mYIbz zm>+2gJa{&@OMiW9G$$0BjEdT#grBgfW)*3$clo2m-7+a{1I0I+E2s5Y-5Yq?1FFhI zOu+5nNX2A{234oL=l`J>(7Y00TMiBJM2A;R!#%65Z(5?rOrZCCkkfBH{ zUp8nXZEbekdCOsct|{ftNmB;?Lv8`-_gT7V9S#2#XpLdw8T=WS-CV37xf?C`r%+Ej zLHx`vuiM535ppeY!fZ@}7i9HW3lC*zF*w~C{m#(`W2b4g3_0#wx9z|R8&sX>LU(Mm zWs2P%@_a|3eHnMs_s|Wza`7!X7G+fxck}1h5$ZF;GBKAK3ROFb918<8(!oR9u*oJ* zN_4f4J>0I{uj@S9#>b>dRIl0gQrOv`s_?SJ^ep1sX7FkQx)##T1E_~^m8WFLWuqDy z_I=|8==$6fdt#7l#F(P{E=0e0Wp=JDpzi&K_VRB<;)^!p_#fB!I|ic{VB7;~9*kn( zIgq!2BLISwJW5(6DyO$7reAJ0NKAJb&8gWoe|yWG{GzYw={rs3Y>qJ}%nl#c-{KVU z&mW@E>opH-ZXt9mgPy~-Bkt!V`YM4Bj)4t+W!&}nJ_1jrc(<>>>l0Kl_LS_@<7`vlcCVI=jvU=;!M`9N?I|%ko}}IKUMo=X0;$D;4@U8{Mb75p2eSCC)|5+2g1BE^-|BpoNfw5lL3Nnz7Z@Z2!Fr7KV!NognpUdg+v|5s7C*O0O=kl**4Q1sedg^XG z-n3)JT`kV)ClLpBJTK`;C}V!C@Z>^$pXq&X;hj3J!v4#qrjctM ztdJ_-D5YRjAYn!}fswsS$j?=?;y3t9Pk>vGIy;aPEY|s%Cs{^RzT^UNgBfRKsgqVl z?(%6Tt-G(+wF`2g3gunb>V&XYEUy5?+gw&TcYi1}E#Cey5fW&4Wvw z3?!0cB-Dh^E*N&oh@BWTosH0nnUu=pn^AjccCR%z?W~CKDfS|p!cI`oCdn18T` z2&xQSXfgw&M3feWr#OXyfsZ5|a|$EIWoRl= zhxjkmla{0WtIL|1QCmn7mI=>+mec~k?mvet=b&w1eu|6Uf~Sm*0a^!1296id(CQp8 zi~+qy*s_D{sYiZPlL++T7*TY%>S>v8ZxQlwrq>7!A`%uCiZJ6c=zhHka zp}oRA^lS7tMCz~|DCp|KR2?ao<@$yHfvGE90D+|adts+F z3d&^YB2q|p)1np~Cxab##o(`v5?zngFc0L;jk#i77i%RJsQh>!=Bl~D2iy9#>XCrO zgWDPog=*b?Qc~yAHv0=7T4LM0CGk|?rwrbo{w5Sk24S%yYz&~D*dp$y0dD^>QSUuyTZNanj?*6a^dfi_!s5* zkA@G*`5EtY3?|urJ-V)bM_ek9l48av#|IR2(%`oxb&0=l1HbTk=b9V$PmUMg4(+_@ zigj8vJ(}WWd}8CnWbanXBq^zj(T+|7>%;&v%tspwi_?q*7!`Cug*N8B(&V~AtazwD zHajZA=A>|DRD7o5PTt+8H$Hytb-9j@