Hello community,

here is the log from the commit of package python-pre-commit for 
openSUSE:Factory checked in at 2020-05-04 18:40:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pre-commit (Old)
 and      /work/SRC/openSUSE:Factory/.python-pre-commit.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pre-commit"

Mon May  4 18:40:27 2020 rev:3 rq:799932 version:2.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pre-commit/python-pre-commit.changes      
2020-03-19 19:52:36.484264074 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pre-commit.new.2738/python-pre-commit.changes
    2020-05-04 18:41:23.893160021 +0200
@@ -1,0 +2,25 @@
+Sat May  2 21:01:03 UTC 2020 - Arun Persaud <a...@gmx.de>
+
+- specfile:
+  * be more specific in %files section
+
+- update to version 2.3.0:
+  * Features
+    + Calculate character width using `east_asian_width` - #1378 PR by
+      @sophgn.
+    + Use `language_version: system` by default for `node` hooks if
+      `node` / `npm` are globally installed.  - #1388 PR by @asottile.
+  * Fixes
+    + No longer use a hard-coded user id for docker hooks on windows -
+      #1371 PR by @killuazhu.
+    + Fix colors on windows during `git commit` - #1381 issue by
+      @Cielquan.  - #1382 PR by @asottile.
+    + Produce readable error message for incorrect argument count to
+      `hook-impl` - #1394 issue by @pip9ball.  - #1395 PR by
+      @asottile.
+    + Fix installations which involve an upgrade of `pip` on windows -
+      #1398 issue by @xiaohuazi123.  - #1399 PR by @asottile.
+    + Preserve line endings in `pre-commit autoupdate` - #1402 PR by
+      @utek.
+
+-------------------------------------------------------------------

Old:
----
  pre_commit-2.2.0.tar.gz

New:
----
  pre_commit-2.3.0.tar.gz

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

Other differences:
------------------
++++++ python-pre-commit.spec ++++++
--- /var/tmp/diff_new_pack.VhX2Oq/_old  2020-05-04 18:41:25.861164080 +0200
+++ /var/tmp/diff_new_pack.VhX2Oq/_new  2020-05-04 18:41:25.865164088 +0200
@@ -18,9 +18,8 @@
 
 %define skip_python2 1
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define skip_python2 1
 Name:           python-pre-commit
-Version:        2.2.0
+Version:        2.3.0
 Release:        0
 Summary:        Multi-language pre-commit hooks
 License:        MIT
@@ -91,6 +90,7 @@
 %{_bindir}/pre-commit-validate-manifest
 %{_bindir}/pre-commit
 %{_bindir}/pre-commit-validate-config
-%{python_sitelib}/*
+%{python_sitelib}/pre_commit
+%{python_sitelib}/pre_commit-%{version}-py*.egg-info
 
 %changelog

++++++ pre_commit-2.2.0.tar.gz -> pre_commit-2.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/.pre-commit-config.yaml 
new/pre-commit-2.3.0/.pre-commit-config.yaml
--- old/pre-commit-2.2.0/.pre-commit-config.yaml        2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/.pre-commit-config.yaml        2020-04-22 
23:16:23.000000000 +0200
@@ -17,34 +17,34 @@
     -   id: flake8
         additional_dependencies: [flake8-typing-imports==1.6.0]
 -   repo: https://github.com/pre-commit/mirrors-autopep8
-    rev: v1.5
+    rev: v1.5.1
     hooks:
     -   id: autopep8
 -   repo: https://github.com/pre-commit/pre-commit
-    rev: v2.1.1
+    rev: v2.2.0
     hooks:
     -   id: validate_manifest
 -   repo: https://github.com/asottile/pyupgrade
-    rev: v2.0.1
+    rev: v2.1.0
     hooks:
     -   id: pyupgrade
         args: [--py36-plus]
 -   repo: https://github.com/asottile/reorder_python_imports
-    rev: v1.9.0
+    rev: v2.1.0
     hooks:
     -   id: reorder-python-imports
         args: [--py3-plus]
 -   repo: https://github.com/asottile/add-trailing-comma
-    rev: v1.5.0
+    rev: v2.0.1
     hooks:
     -   id: add-trailing-comma
         args: [--py36-plus]
 -   repo: https://github.com/asottile/setup-cfg-fmt
-    rev: v1.6.0
+    rev: v1.8.2
     hooks:
     -   id: setup-cfg-fmt
 -   repo: https://github.com/pre-commit/mirrors-mypy
-    rev: v0.761
+    rev: v0.770
     hooks:
     -   id: mypy
         exclude: ^testing/resources/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/CHANGELOG.md 
new/pre-commit-2.3.0/CHANGELOG.md
--- old/pre-commit-2.2.0/CHANGELOG.md   2020-03-12 20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/CHANGELOG.md   2020-04-22 23:16:23.000000000 +0200
@@ -1,9 +1,34 @@
+2.3.0 - 2020-04-22
+==================
+
+### Features
+- Calculate character width using `east_asian_width`
+    - #1378 PR by @sophgn.
+- Use `language_version: system` by default for `node` hooks if `node` / `npm`
+  are globally installed.
+    - #1388 PR by @asottile.
+
+### Fixes
+- No longer use a hard-coded user id for docker hooks on windows
+    - #1371 PR by @killuazhu.
+- Fix colors on windows during `git commit`
+    - #1381 issue by @Cielquan.
+    - #1382 PR by @asottile.
+- Produce readable error message for incorrect argument count to `hook-impl`
+    - #1394 issue by @pip9ball.
+    - #1395 PR by @asottile.
+- Fix installations which involve an upgrade of `pip` on windows
+    - #1398 issue by @xiaohuazi123.
+    - #1399 PR by @asottile.
+- Preserve line endings in `pre-commit autoupdate`
+    - #1402 PR by @utek.
+
 2.2.0 - 2020-03-12
 ==================
 
 ### Features
 - Add support for the `post-checkout` hook
-    - #1210 issue by @domenkozar.
+    - #1120 issue by @domenkozar.
     - #1339 PR by @andrewhare.
 - Add more readable `--from-ref` / `--to-ref` aliases for `--source` /
   `--origin`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/color.py 
new/pre-commit-2.3.0/pre_commit/color.py
--- old/pre-commit-2.2.0/pre_commit/color.py    2020-03-12 20:37:15.000000000 
+0100
+++ new/pre-commit-2.3.0/pre_commit/color.py    2020-04-22 23:16:23.000000000 
+0200
@@ -11,7 +11,7 @@
         from ctypes.wintypes import DWORD
         from ctypes.wintypes import HANDLE
 
-        STD_OUTPUT_HANDLE = -11
+        STD_ERROR_HANDLE = -12
         ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
 
         def bool_errcheck(result, func, args):
@@ -40,9 +40,9 @@
         #
         # More info on the escape sequences supported:
         # 
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
-        stdout = GetStdHandle(STD_OUTPUT_HANDLE)
-        flags = GetConsoleMode(stdout)
-        SetConsoleMode(stdout, flags | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
+        stderr = GetStdHandle(STD_ERROR_HANDLE)
+        flags = GetConsoleMode(stderr)
+        SetConsoleMode(stderr, flags | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
 
     try:
         _enable()
@@ -90,7 +90,7 @@
     return (
         setting == 'always' or (
             setting == 'auto' and
-            sys.stdout.isatty() and
+            sys.stderr.isatty() and
             terminal_supports_color and
             os.getenv('TERM') != 'dumb'
         )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/commands/autoupdate.py 
new/pre-commit-2.3.0/pre_commit/commands/autoupdate.py
--- old/pre-commit-2.2.0/pre_commit/commands/autoupdate.py      2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/commands/autoupdate.py      2020-04-22 
23:16:23.000000000 +0200
@@ -93,7 +93,7 @@
         retry: bool = False,
 ) -> Tuple[List[str], List[int]]:
     """detect `rev:` lines or reformat the file"""
-    with open(path) as f:
+    with open(path, newline='') as f:
         original = f.read()
 
     lines = original.splitlines(True)
@@ -126,7 +126,7 @@
             comment = match[4]
         lines[idx] = f'{match[1]}rev:{match[2]}{new_rev}{comment}{match[5]}'
 
-    with open(path, 'w') as f:
+    with open(path, 'w', newline='') as f:
         f.write(''.join(lines))
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/commands/hook_impl.py 
new/pre-commit-2.3.0/pre_commit/commands/hook_impl.py
--- old/pre-commit-2.2.0/pre_commit/commands/hook_impl.py       2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/commands/hook_impl.py       2020-04-22 
23:16:23.000000000 +0200
@@ -147,15 +147,44 @@
     return None
 
 
+_EXPECTED_ARG_LENGTH_BY_HOOK = {
+    'commit-msg': 1,
+    'post-checkout': 3,
+    'pre-commit': 0,
+    'pre-merge-commit': 0,
+    'pre-push': 2,
+}
+
+
+def _check_args_length(hook_type: str, args: Sequence[str]) -> None:
+    if hook_type == 'prepare-commit-msg':
+        if len(args) < 1 or len(args) > 3:
+            raise SystemExit(
+                f'hook-impl for {hook_type} expected 1, 2, or 3 arguments '
+                f'but got {len(args)}: {args}',
+            )
+    elif hook_type in _EXPECTED_ARG_LENGTH_BY_HOOK:
+        expected = _EXPECTED_ARG_LENGTH_BY_HOOK[hook_type]
+        if len(args) != expected:
+            arguments_s = 'argument' if expected == 1 else 'arguments'
+            raise SystemExit(
+                f'hook-impl for {hook_type} expected {expected} {arguments_s} '
+                f'but got {len(args)}: {args}',
+            )
+    else:
+        raise AssertionError(f'unexpected hook type: {hook_type}')
+
+
 def _run_ns(
         hook_type: str,
         color: bool,
         args: Sequence[str],
         stdin: bytes,
 ) -> Optional[argparse.Namespace]:
+    _check_args_length(hook_type, args)
     if hook_type == 'pre-push':
         return _pre_push_ns(color, args, stdin)
-    elif hook_type in {'prepare-commit-msg', 'commit-msg'}:
+    elif hook_type in {'commit-msg', 'prepare-commit-msg'}:
         return _ns(hook_type, color, commit_msg_filename=args[0])
     elif hook_type in {'pre-merge-commit', 'pre-commit'}:
         return _ns(hook_type, color)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/commands/run.py 
new/pre-commit-2.3.0/pre_commit/commands/run.py
--- old/pre-commit-2.2.0/pre_commit/commands/run.py     2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/commands/run.py     2020-04-22 
23:16:23.000000000 +0200
@@ -6,6 +6,7 @@
 import re
 import subprocess
 import time
+import unicodedata
 from typing import Any
 from typing import Collection
 from typing import Dict
@@ -33,8 +34,13 @@
 logger = logging.getLogger('pre_commit')
 
 
+def _len_cjk(msg: str) -> int:
+    widths = {'A': 1, 'F': 2, 'H': 1, 'N': 1, 'Na': 1, 'W': 2}
+    return sum(widths[unicodedata.east_asian_width(c)] for c in msg)
+
+
 def _start_msg(*, start: str, cols: int, end_len: int) -> str:
-    dots = '.' * (cols - len(start) - end_len - 1)
+    dots = '.' * (cols - _len_cjk(start) - end_len - 1)
     return f'{start}{dots}'
 
 
@@ -47,7 +53,7 @@
         use_color: bool,
         postfix: str = '',
 ) -> str:
-    dots = '.' * (cols - len(start) - len(postfix) - len(end_msg) - 1)
+    dots = '.' * (cols - _len_cjk(start) - len(postfix) - len(end_msg) - 1)
     end = color.format_color(end_msg, end_color, use_color)
     return f'{start}{dots}{postfix}{end}\n'
 
@@ -206,7 +212,7 @@
         Hook name...(no files to check) Skipped
     """
     if hooks:
-        name_len = max(len(hook.name) for hook in hooks)
+        name_len = max(_len_cjk(hook.name) for hook in hooks)
     else:
         name_len = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/languages/docker.py 
new/pre-commit-2.3.0/pre_commit/languages/docker.py
--- old/pre-commit-2.2.0/pre_commit/languages/docker.py 2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/languages/docker.py 2020-04-22 
23:16:23.000000000 +0200
@@ -76,18 +76,18 @@
         os.mkdir(directory)
 
 
-def get_docker_user() -> str:  # pragma: win32 no cover
+def get_docker_user() -> Tuple[str, ...]:  # pragma: win32 no cover
     try:
-        return f'{os.getuid()}:{os.getgid()}'
+        return ('-u', f'{os.getuid()}:{os.getgid()}')
     except AttributeError:
-        return '1000:1000'
+        return ()
 
 
 def docker_cmd() -> Tuple[str, ...]:  # pragma: win32 no cover
     return (
         'docker', 'run',
         '--rm',
-        '-u', get_docker_user(),
+        *get_docker_user(),
         # 
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.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/languages/node.py 
new/pre-commit-2.3.0/pre_commit/languages/node.py
--- old/pre-commit-2.2.0/pre_commit/languages/node.py   2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/languages/node.py   2020-04-22 
23:16:23.000000000 +0200
@@ -1,4 +1,5 @@
 import contextlib
+import functools
 import os
 import sys
 from typing import Generator
@@ -6,6 +7,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 Var
@@ -18,10 +20,22 @@
 from pre_commit.util import cmd_output_b
 
 ENVIRONMENT_DIR = 'node_env'
-get_default_version = helpers.basic_get_default_version
 healthy = helpers.basic_healthy
 
 
+@functools.lru_cache(maxsize=1)
+def get_default_version() -> str:
+    # nodeenv does not yet support `-n system` on windows
+    if sys.platform == 'win32':
+        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')):
+        return 'system'
+    else:
+        return C.DEFAULT
+
+
 def _envdir(prefix: Prefix, version: str) -> str:
     directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
     return prefix.path(directory)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/pre_commit/languages/python.py 
new/pre-commit-2.3.0/pre_commit/languages/python.py
--- old/pre-commit-2.2.0/pre_commit/languages/python.py 2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/pre_commit/languages/python.py 2020-04-22 
23:16:23.000000000 +0200
@@ -182,8 +182,8 @@
             version: str,
             additional_dependencies: Sequence[str],
     ) -> None:
-        additional_dependencies = tuple(additional_dependencies)
         directory = helpers.environment_dir(_dir, version)
+        install = ('python', '-mpip', 'install', '.', *additional_dependencies)
 
         env_dir = prefix.path(directory)
         with clean_path_on_failure(env_dir):
@@ -193,9 +193,7 @@
                 python = os.path.realpath(sys.executable)
             _make_venv(env_dir, python)
             with in_env(prefix, version):
-                helpers.run_setup_cmd(
-                    prefix, ('pip', 'install', '.') + additional_dependencies,
-                )
+                helpers.run_setup_cmd(prefix, install)
 
     return in_env, healthy, run_hook, install_environment
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/setup.cfg 
new/pre-commit-2.3.0/setup.cfg
--- old/pre-commit-2.2.0/setup.cfg      2020-03-12 20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/setup.cfg      2020-04-22 23:16:23.000000000 +0200
@@ -1,6 +1,6 @@
 [metadata]
 name = pre_commit
-version = 2.2.0
+version = 2.3.0
 description = A framework for managing and maintaining multi-language 
pre-commit hooks.
 long_description = file: README.md
 long_description_content_type = text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/color_test.py 
new/pre-commit-2.3.0/tests/color_test.py
--- old/pre-commit-2.2.0/tests/color_test.py    2020-03-12 20:37:15.000000000 
+0100
+++ new/pre-commit-2.3.0/tests/color_test.py    2020-04-22 23:16:23.000000000 
+0200
@@ -29,26 +29,26 @@
 
 
 def test_use_color_no_tty():
-    with mock.patch.object(sys.stdout, 'isatty', return_value=False):
+    with mock.patch.object(sys.stderr, 'isatty', return_value=False):
         assert use_color('auto') is False
 
 
 def test_use_color_tty_with_color_support():
-    with mock.patch.object(sys.stdout, 'isatty', return_value=True):
+    with mock.patch.object(sys.stderr, 'isatty', return_value=True):
         with mock.patch('pre_commit.color.terminal_supports_color', True):
             with envcontext.envcontext((('TERM', envcontext.UNSET),)):
                 assert use_color('auto') is True
 
 
 def test_use_color_tty_without_color_support():
-    with mock.patch.object(sys.stdout, 'isatty', return_value=True):
+    with mock.patch.object(sys.stderr, 'isatty', return_value=True):
         with mock.patch('pre_commit.color.terminal_supports_color', False):
             with envcontext.envcontext((('TERM', envcontext.UNSET),)):
                 assert use_color('auto') is False
 
 
 def test_use_color_dumb_term():
-    with mock.patch.object(sys.stdout, 'isatty', return_value=True):
+    with mock.patch.object(sys.stderr, 'isatty', return_value=True):
         with mock.patch('pre_commit.color.terminal_supports_color', True):
             with envcontext.envcontext((('TERM', 'dumb'),)):
                 assert use_color('auto') is False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/commands/autoupdate_test.py 
new/pre-commit-2.3.0/tests/commands/autoupdate_test.py
--- old/pre-commit-2.2.0/tests/commands/autoupdate_test.py      2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/tests/commands/autoupdate_test.py      2020-04-22 
23:16:23.000000000 +0200
@@ -263,6 +263,45 @@
     assert cfg.read() == expected
 
 
+def test_does_not_change_mixed_endlines_read(up_to_date, tmpdir, store):
+    fmt = (
+        'repos:\n'
+        '-   repo: {}\n'
+        '    rev: {}  # definitely the version I want!\r\n'
+        '    hooks:\r\n'
+        '    -   id: foo\n'
+        '        # These args are because reasons!\r\n'
+        '        args: [foo, bar, baz]\r\n'
+    )
+    cfg = tmpdir.join(C.CONFIG_FILE)
+
+    expected = fmt.format(up_to_date, git.head_rev(up_to_date)).encode()
+    cfg.write_binary(expected)
+
+    assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+    assert cfg.read_binary() == expected
+
+
+def test_does_not_change_mixed_endlines_write(tmpdir, out_of_date, store):
+    fmt = (
+        'repos:\n'
+        '-   repo: {}\n'
+        '    rev: {}  # definitely the version I want!\r\n'
+        '    hooks:\r\n'
+        '    -   id: foo\n'
+        '        # These args are because reasons!\r\n'
+        '        args: [foo, bar, baz]\r\n'
+    )
+    cfg = tmpdir.join(C.CONFIG_FILE)
+    cfg.write_binary(
+        fmt.format(out_of_date.path, out_of_date.original_rev).encode(),
+    )
+
+    assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+    expected = fmt.format(out_of_date.path, out_of_date.head_rev).encode()
+    assert cfg.read_binary() == expected
+
+
 def test_loses_formatting_when_not_detectable(out_of_date, store, tmpdir):
     """A best-effort attempt is made at updating rev without rewriting
     formatting.  When the original formatting cannot be detected, this
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/commands/hook_impl_test.py 
new/pre-commit-2.3.0/tests/commands/hook_impl_test.py
--- old/pre-commit-2.2.0/tests/commands/hook_impl_test.py       2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/tests/commands/hook_impl_test.py       2020-04-22 
23:16:23.000000000 +0200
@@ -89,6 +89,51 @@
             call()
 
 
+@pytest.mark.parametrize(
+    ('hook_type', 'args'),
+    (
+        ('pre-commit', []),
+        ('pre-merge-commit', []),
+        ('pre-push', ['branch_name', 'remote_name']),
+        ('commit-msg', ['.git/COMMIT_EDITMSG']),
+        ('post-checkout', ['old_head', 'new_head', '1']),
+        # multiple choices for commit-editmsg
+        ('prepare-commit-msg', ['.git/COMMIT_EDITMSG']),
+        ('prepare-commit-msg', ['.git/COMMIT_EDITMSG', 'message']),
+        ('prepare-commit-msg', ['.git/COMMIT_EDITMSG', 'commit', 'deadbeef']),
+    ),
+)
+def test_check_args_length_ok(hook_type, args):
+    hook_impl._check_args_length(hook_type, args)
+
+
+def test_check_args_length_error_too_many_plural():
+    with pytest.raises(SystemExit) as excinfo:
+        hook_impl._check_args_length('pre-commit', ['run', '--all-files'])
+    msg, = excinfo.value.args
+    assert msg == (
+        'hook-impl for pre-commit expected 0 arguments but got 2: '
+        "['run', '--all-files']"
+    )
+
+
+def test_check_args_length_error_too_many_singluar():
+    with pytest.raises(SystemExit) as excinfo:
+        hook_impl._check_args_length('commit-msg', [])
+    msg, = excinfo.value.args
+    assert msg == 'hook-impl for commit-msg expected 1 argument but got 0: []'
+
+
+def test_check_args_length_prepare_commit_msg_error():
+    with pytest.raises(SystemExit) as excinfo:
+        hook_impl._check_args_length('prepare-commit-msg', [])
+    msg, = excinfo.value.args
+    assert msg == (
+        'hook-impl for prepare-commit-msg expected 1, 2, or 3 arguments '
+        'but got 0: []'
+    )
+
+
 def test_run_ns_pre_commit():
     ns = hook_impl._run_ns('pre-commit', True, (), b'')
     assert ns is not None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/commands/run_test.py 
new/pre-commit-2.3.0/tests/commands/run_test.py
--- old/pre-commit-2.2.0/tests/commands/run_test.py     2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/tests/commands/run_test.py     2020-04-22 
23:16:23.000000000 +0200
@@ -52,6 +52,18 @@
     assert ret == 'start......end\n'
 
 
+def test_full_msg_with_cjk():
+    ret = _full_msg(
+        start='啊あ아',
+        end_msg='end',
+        end_color='',
+        use_color=False,
+        cols=15,
+    )
+    # 5 dots: 15 - 6 - 3 - 1
+    assert ret == '啊あ아.....end\n'
+
+
 def test_full_msg_with_color():
     ret = _full_msg(
         start='start',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/languages/docker_test.py 
new/pre-commit-2.3.0/tests/languages/docker_test.py
--- old/pre-commit-2.2.0/tests/languages/docker_test.py 2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/tests/languages/docker_test.py 2020-04-22 
23:16:23.000000000 +0200
@@ -20,4 +20,4 @@
         getuid=invalid_attribute,
         getgid=invalid_attribute,
     ):
-        assert docker.get_docker_user() == '1000:1000'
+        assert docker.get_docker_user() == ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/languages/node_test.py 
new/pre-commit-2.3.0/tests/languages/node_test.py
--- old/pre-commit-2.2.0/tests/languages/node_test.py   1970-01-01 
01:00:00.000000000 +0100
+++ new/pre-commit-2.3.0/tests/languages/node_test.py   2020-04-22 
23:16:23.000000000 +0200
@@ -0,0 +1,47 @@
+import sys
+from unittest import mock
+
+import pytest
+
+import pre_commit.constants as C
+from pre_commit import parse_shebang
+from pre_commit.languages.node import get_default_version
+
+
+ACTUAL_GET_DEFAULT_VERSION = get_default_version.__wrapped__
+
+
+@pytest.fixture
+def is_linux():
+    with mock.patch.object(sys, 'platform', 'linux'):
+        yield
+
+
+@pytest.fixture
+def is_win32():
+    with mock.patch.object(sys, 'platform', 'win32'):
+        yield
+
+
+@pytest.fixture
+def find_exe_mck():
+    with mock.patch.object(parse_shebang, 'find_executable') as mck:
+        yield mck
+
+
+@pytest.mark.usefixtures('is_linux')
+def test_sets_system_when_node_and_npm_are_available(find_exe_mck):
+    find_exe_mck.return_value = '/path/to/exe'
+    assert ACTUAL_GET_DEFAULT_VERSION() == 'system'
+
+
+@pytest.mark.usefixtures('is_linux')
+def test_uses_default_when_node_and_npm_are_not_available(find_exe_mck):
+    find_exe_mck.return_value = None
+    assert ACTUAL_GET_DEFAULT_VERSION() == C.DEFAULT
+
+
+@pytest.mark.usefixtures('is_win32')
+def test_sets_default_on_windows(find_exe_mck):
+    find_exe_mck.return_value = '/path/to/exe'
+    assert ACTUAL_GET_DEFAULT_VERSION() == C.DEFAULT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pre-commit-2.2.0/tests/repository_test.py 
new/pre-commit-2.3.0/tests/repository_test.py
--- old/pre-commit-2.2.0/tests/repository_test.py       2020-03-12 
20:37:15.000000000 +0100
+++ new/pre-commit-2.3.0/tests/repository_test.py       2020-04-22 
23:16:23.000000000 +0200
@@ -131,9 +131,9 @@
 def test_python_hook_default_version(tempdir_factory, store):
     # make sure that this continues to work for platforms where default
     # language detection does not work
-    with mock.patch.object(
-            python, 'get_default_version', return_value=C.DEFAULT,
-    ):
+    returns_default = mock.Mock(return_value=C.DEFAULT)
+    lang = languages['python']._replace(get_default_version=returns_default)
+    with mock.patch.dict(languages, python=lang):
         test_python_hook(tempdir_factory, store)
 
 
@@ -243,6 +243,15 @@
     )
 
 
+def test_run_a_node_hook_default_version(tempdir_factory, store):
+    # make sure that this continues to work for platforms where node is not
+    # installed at the system
+    returns_default = mock.Mock(return_value=C.DEFAULT)
+    lang = languages['node']._replace(get_default_version=returns_default)
+    with mock.patch.dict(languages, node=lang):
+        test_run_a_node_hook(tempdir_factory, store)
+
+
 def test_run_versioned_node_hook(tempdir_factory, store):
     _test_hook_repo(
         tempdir_factory, store, 'node_versioned_hooks_repo',


Reply via email to