Skip to content

Commit 65a2bf2

Browse files
committed
fix: bugs for ignoring stdout and stderr
1 parent 7e3ae65 commit 65a2bf2

File tree

2 files changed

+69
-22
lines changed

2 files changed

+69
-22
lines changed

src/commitlint/cli.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,22 +135,25 @@ def _handle_commit_message(
135135
Args:
136136
commit_message (str): The commit message to be handled.
137137
skip_detail (bool): Whether to skip the detailed error linting.
138-
quiet (bool): Whether to print the detailed errors
138+
quiet (bool): Whether to ignore stout and stderr
139139
140140
Raises:
141141
SystemExit: If the commit message is invalid.
142142
"""
143143
success, errors = lint_commit_message(commit_message, skip_detail=skip_detail)
144144

145-
if quiet and errors:
145+
if quiet and not success:
146146
sys.exit(1)
147147

148-
elif not quiet:
149-
if success:
148+
if success:
149+
if not quiet:
150150
sys.stdout.write(f"{VALIDATION_SUCCESSFUL}\n")
151-
else:
151+
152+
if not success:
153+
if not quiet:
152154
_show_errors(commit_message, errors, skip_detail=skip_detail)
153-
sys.exit(1)
155+
156+
sys.exit(1)
154157

155158

156159
def _handle_multiple_commit_messages(
@@ -166,19 +169,19 @@ def _handle_multiple_commit_messages(
166169
Raises:
167170
SystemExit: If any of the commit messages is invalid.
168171
"""
169-
# if not quiet:
170172
has_error = False
171173
for commit_message in commit_messages:
172174
success, errors = lint_commit_message(commit_message, skip_detail=skip_detail)
173-
if not success and not quiet:
175+
if not success:
174176
has_error = True
175-
_show_errors(commit_message, errors, skip_detail=skip_detail)
176-
sys.stderr.write("\n")
177+
if not quiet:
178+
_show_errors(commit_message, errors, skip_detail=skip_detail)
179+
sys.stderr.write("\n")
177180

178181
if has_error:
179182
sys.exit(1)
180183

181-
elif not has_error and not quiet:
184+
if not quiet:
182185
sys.stdout.write(f"{VALIDATION_SUCCESSFUL}\n")
183186

184187

tests/test_cli.py

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,29 +325,25 @@ def test__main__handle_exceptions(
325325
mock_stderr_write.assert_called_with("Test message\n")
326326

327327
@patch(
328-
"argparse.ArgumentParser.parse_args",
328+
"commitlint.cli.get_args",
329329
return_value=MagicMock(
330330
commit_message="Invalid commit message",
331331
file=None,
332332
hash=None,
333333
from_hash=None,
334+
skip_detail=False,
334335
quiet=True,
335336
),
336337
)
337-
@patch(
338-
"commitlint.cli.lint_commit_message",
339-
)
338+
@patch("sys.stdout.write")
340339
@patch("sys.stderr.write")
341340
@patch("sys.exit")
342-
def test__main__handle_quiet_option(
343-
self, mock_sys_exit, mock_stderr_write, mock_lint_commit_message, *_
341+
def test__main__quiet_option_with_invalid_commit_message(
342+
self, mock_sys_exit, mock_stderr_write, mock_stdout_write, *_
344343
):
345-
mock_lint_commit_message.side_effect = CommitlintException(
346-
"Invalid commit message"
347-
)
348344
main()
349-
mock_sys_exit.assert_called_with(1)
350-
mock_stderr_write.assert_called_with("Invalid commit message\n")
345+
mock_stderr_write.assert_not_called()
346+
mock_stdout_write.assert_not_called()
351347

352348
@patch(
353349
"commitlint.cli.get_args",
@@ -370,3 +366,51 @@ def test__main__quiet_option_with_valid_commit_message(
370366
mock_stderr_write.assert_not_called()
371367
mock_stdout_write.assert_not_called()
372368
mock_sys_exit.assert_not_called()
369+
370+
@patch(
371+
"commitlint.cli.get_args",
372+
return_value=MagicMock(
373+
file=None,
374+
hash=None,
375+
from_hash="start_commit_hash",
376+
to_hash="end_commit_hash",
377+
skip_detail=False,
378+
quiet=True,
379+
),
380+
)
381+
@patch("commitlint.cli.get_commit_messages_of_hash_range")
382+
@patch("sys.stdout.write")
383+
def test__valid_commit_message_with_hash_range_in_quiet(
384+
self, mock_stdout_write, mock_get_commit_messages, *_
385+
):
386+
mock_get_commit_messages.return_value = [
387+
"feat: commit message 1",
388+
"fix: commit message 2",
389+
]
390+
main()
391+
mock_stdout_write.assert_not_called()
392+
393+
@patch(
394+
"commitlint.cli.get_args",
395+
return_value=MagicMock(
396+
file=None,
397+
hash=None,
398+
from_hash="start_commit_hash",
399+
to_hash="end_commit_hash",
400+
skip_detail=False,
401+
quiet=True,
402+
),
403+
)
404+
@patch("commitlint.cli.get_commit_messages_of_hash_range")
405+
@patch("sys.exit")
406+
@patch("sys.stdout.write")
407+
def test__invalid_commit_message_with_hash_range_in_quiet(
408+
self, mock_stdout_write, mock_sys_exit, mock_get_commit_messages, *_
409+
):
410+
mock_get_commit_messages.return_value = [
411+
"Invalid commit message 1",
412+
"Invalid commit message 2",
413+
]
414+
main()
415+
mock_sys_exit.assert_called_once_with(1)
416+
mock_stdout_write.assert_not_called()

0 commit comments

Comments
 (0)