diff --git a/pre_commit/color.py b/pre_commit/color.py index c785e2c9..2ede410a 100644 --- a/pre_commit/color.py +++ b/pre_commit/color.py @@ -48,6 +48,9 @@ def use_color(setting): if setting not in COLOR_CHOICES: raise InvalidColorSetting(setting) + if os.environ.get('NO_COLOR'): + return False + return ( setting == 'always' or (setting == 'auto' and sys.stdout.isatty() and terminal_supports_color) diff --git a/tests/color_test.py b/tests/color_test.py index 6e11765c..4ba3f327 100644 --- a/tests/color_test.py +++ b/tests/color_test.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import os import sys import mock @@ -50,3 +51,18 @@ def test_use_color_tty_without_color_support(): def test_use_color_raises_if_given_shenanigans(): with pytest.raises(InvalidColorSetting): use_color('herpaderp') + + +def test_no_color_env_unset(): + with mock.patch.dict(os.environ, clear=True): + assert use_color('always') is True + + +def test_no_color_env_empty(): + with mock.patch.dict(os.environ, NO_COLOR=''): + assert use_color('always') is True + + +def test_no_color_env_non_empty(): + with mock.patch.dict(os.environ, NO_COLOR=' '): + assert use_color('always') is False