diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py index 89a134d2..8a632008 100644 --- a/pre_commit/xargs.py +++ b/pre_commit/xargs.py @@ -17,9 +17,9 @@ def _command_length(*cmd): full_cmd = ' '.join(cmd) # win32 uses the amount of characters, more details at: - # https://blogs.msdn.microsoft.com/oldnewthing/20031210-00/?p=41553/ + # https://github.com/pre-commit/pre-commit/pull/839 if sys.platform == 'win32': - return len(full_cmd) + return len(full_cmd.encode('utf-16le')) // 2 return len(full_cmd.encode(sys.getfilesystemencoding())) diff --git a/tests/xargs_test.py b/tests/xargs_test.py index 2d2a4ba2..de16a012 100644 --- a/tests/xargs_test.py +++ b/tests/xargs_test.py @@ -55,7 +55,7 @@ def test_partition_limits(): def test_partition_limit_win32(sys_win32_mock): cmd = ('ninechars',) - varargs = (u'😑' * 10,) + varargs = ('😑' * 10,) with mock.patch('pre_commit.xargs.sys', sys_win32_mock): ret = xargs.partition(cmd, varargs, _max_length=20) @@ -64,7 +64,7 @@ def test_partition_limit_win32(sys_win32_mock): def test_partition_limit_linux(sys_linux_mock): cmd = ('ninechars',) - varargs = (u'😑' * 5,) + varargs = ('😑' * 5,) with mock.patch('pre_commit.xargs.sys', sys_linux_mock): ret = xargs.partition(cmd, varargs, _max_length=30) @@ -73,7 +73,7 @@ def test_partition_limit_linux(sys_linux_mock): def test_argument_too_long_with_large_unicode(sys_linux_mock): cmd = ('ninechars',) - varargs = (u'😑' * 10,) # 4 bytes * 10 + varargs = ('😑' * 10,) # 4 bytes * 10 with mock.patch('pre_commit.xargs.sys', sys_linux_mock): with pytest.raises(xargs.ArgumentTooLongError): xargs.partition(cmd, varargs, _max_length=20)