Skip to content

Commit 247d45a

Browse files
committed
fixed #1141
1 parent 0245a67 commit 247d45a

File tree

3 files changed

+34
-14
lines changed

3 files changed

+34
-14
lines changed

pre_commit/error_handler.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55
import contextlib
66
import os.path
7+
import sys
78
import traceback
89

910
import six
1011

1112
from pre_commit import five
1213
from pre_commit import output
14+
from pre_commit.constants import VERSION as pre_commit_version
1315
from pre_commit.store import Store
1416

1517

@@ -29,6 +31,9 @@ def _log_and_exit(msg, exc, formatted):
2931
five.to_bytes(msg), b': ',
3032
five.to_bytes(type(exc).__name__), b': ',
3133
_to_bytes(exc), b'\n',
34+
_to_bytes('pre-commit.version={}\n'.format(pre_commit_version)),
35+
_to_bytes('sys.version={}\n'.format(sys.version.replace('\n', ' '))),
36+
_to_bytes('sys.executable={}\n'.format(sys.executable)),
3237
))
3338
output.write(error_msg)
3439
store = Store()

tests/error_handler_test.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,29 @@ def test_log_and_exit(cap_out, mock_store_dir):
104104

105105
printed = cap_out.get()
106106
log_file = os.path.join(mock_store_dir, 'pre-commit.log')
107-
assert printed == (
108-
'msg: FatalError: hai\n'
109-
'Check the log at {}\n'.format(log_file)
110-
)
107+
printed_lines = printed.split('\n')
108+
assert len(printed_lines) == 6, printed_lines
109+
assert printed_lines[0] == 'msg: FatalError: hai'
110+
assert re.match(r'^pre-commit.version=\d+\.\d+\.\d+$', printed_lines[1])
111+
assert printed_lines[2].startswith('sys.version=')
112+
assert printed_lines[3].startswith('sys.executable=')
113+
assert printed_lines[4] == 'Check the log at {}'.format(log_file)
114+
assert printed_lines[5] == '' # checks for \n at the end of last line
111115

112116
assert os.path.exists(log_file)
113117
with io.open(log_file) as f:
114-
assert f.read() == (
115-
'msg: FatalError: hai\n'
116-
"I'm a stacktrace\n"
118+
logged_lines = f.read().split('\n')
119+
assert len(logged_lines) == 6, logged_lines
120+
assert logged_lines[0] == 'msg: FatalError: hai'
121+
assert re.match(
122+
r'^pre-commit.version=\d+\.\d+\.\d+$',
123+
printed_lines[1],
117124
)
125+
assert logged_lines[2].startswith('sys.version=')
126+
assert logged_lines[3].startswith('sys.executable=')
127+
assert logged_lines[4] == "I'm a stacktrace"
128+
# checks for \n at the end of stack trace
129+
assert printed_lines[5] == ''
118130

119131

120132
def test_error_handler_non_ascii_exception(mock_store_dir):
@@ -136,7 +148,7 @@ def test_error_handler_no_tty(tempdir_factory):
136148
pre_commit_home=pre_commit_home,
137149
)
138150
log_file = os.path.join(pre_commit_home, 'pre-commit.log')
139-
assert output[1].replace('\r', '') == (
140-
'An unexpected error has occurred: ValueError: ☃\n'
141-
'Check the log at {}\n'.format(log_file)
142-
)
151+
output_lines = output[1].replace('\r', '').split('\n')
152+
assert output_lines[0] == 'An unexpected error has occurred: ValueError: ☃'
153+
assert output_lines[-2] == 'Check the log at {}'.format(log_file)
154+
assert output_lines[-1] == '' # checks for \n at the end of stack trace

tests/main_test.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,14 @@ def test_expected_fatal_error_no_git_repo(in_tmpdir, cap_out, mock_store_dir):
164164
with pytest.raises(SystemExit):
165165
main.main([])
166166
log_file = os.path.join(mock_store_dir, 'pre-commit.log')
167-
assert cap_out.get() == (
167+
cap_out_lines = cap_out.get().split('\n')
168+
assert (
169+
cap_out_lines[0] ==
168170
'An error has occurred: FatalError: git failed. '
169-
'Is it installed, and are you in a Git repository directory?\n'
170-
'Check the log at {}\n'.format(log_file)
171+
'Is it installed, and are you in a Git repository directory?'
171172
)
173+
assert cap_out_lines[-2] == 'Check the log at {}'.format(log_file)
174+
assert cap_out_lines[-1] == '' # checks for \n at the end of error message
172175

173176

174177
def test_warning_on_tags_only(mock_commands, cap_out, mock_store_dir):

0 commit comments

Comments
 (0)