diff --git a/pre_commit/color.py b/pre_commit/color.py index c785e2c9..1fb6acce 100644 --- a/pre_commit/color.py +++ b/pre_commit/color.py @@ -49,6 +49,10 @@ def use_color(setting): raise InvalidColorSetting(setting) return ( - setting == 'always' or - (setting == 'auto' and sys.stdout.isatty() and terminal_supports_color) + setting == 'always' or ( + setting == 'auto' and + sys.stdout.isatty() and + terminal_supports_color and + os.getenv('TERM') != 'dumb' + ) ) diff --git a/tests/color_test.py b/tests/color_test.py index 6e11765c..6c9889d1 100644 --- a/tests/color_test.py +++ b/tests/color_test.py @@ -5,6 +5,7 @@ import sys import mock import pytest +from pre_commit import envcontext from pre_commit.color import format_color from pre_commit.color import GREEN from pre_commit.color import InvalidColorSetting @@ -38,13 +39,22 @@ def test_use_color_no_tty(): def test_use_color_tty_with_color_support(): with mock.patch.object(sys.stdout, 'isatty', return_value=True): with mock.patch('pre_commit.color.terminal_supports_color', True): - assert use_color('auto') is 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('pre_commit.color.terminal_supports_color', False): - assert use_color('auto') is 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('pre_commit.color.terminal_supports_color', True): + with envcontext.envcontext([('TERM', 'dumb')]): + assert use_color('auto') is False def test_use_color_raises_if_given_shenanigans():