Просмотр исходного кода

Support for NO_COLOR environment variable (#835).

Merge pull request #82 from shivansh02/feature/support-no-color-env-var
Dan Helfman 1 год назад
Родитель
Сommit
16bc0de3fb
3 измененных файлов с 42 добавлено и 5 удалено
  1. 4 0
      borgmatic/logger.py
  2. 1 1
      docs/how-to/set-up-backups.md
  3. 37 4
      tests/unit/test_logger.py

+ 4 - 0
borgmatic/logger.py

@@ -41,6 +41,10 @@ def should_do_markup(no_color, configs):
     if any(config.get('output', {}).get('color') is False for config in configs.values()):
         return False
 
+    no_color_env = os.environ.get('NO_COLOR', None)
+    if no_color_env is not None:
+        return False
+
     py_colors = os.environ.get('PY_COLORS', None)
 
     if py_colors is not None:

+ 1 - 1
docs/how-to/set-up-backups.md

@@ -406,7 +406,7 @@ source /usr/share/fish/vendor_completions.d/borgmatic.fish
 borgmatic produces colored terminal output by default. It is disabled when a
 non-interactive terminal is detected (like a cron job), or when you use the
 `--json` flag. Otherwise, you can disable it by passing the `--no-color` flag,
-setting the environment variable `PY_COLORS=False`, or setting the `color`
+setting the environment variables `PY_COLORS=False` or `NO_COLOR=True`, or setting the `color`
 option to `false` in the `output` section of configuration.
 
 

+ 37 - 4
tests/unit/test_logger.py

@@ -69,7 +69,11 @@ def test_should_do_markup_prefers_any_false_config_value():
 
 
 def test_should_do_markup_respects_PY_COLORS_environment_variable():
-    flexmock(module.os.environ).should_receive('get').and_return('True')
+    flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
+        'True'
+    )
+    flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(None)
+
     flexmock(module).should_receive('to_bool').and_return(True)
 
     assert module.should_do_markup(no_color=False, configs={}) is True
@@ -82,7 +86,7 @@ def test_should_do_markup_prefers_no_color_value_to_config_value():
     )
 
 
-def test_should_do_markup_prefers_config_value_to_PY_COLORS():
+def test_should_do_markup_prefers_config_value_to_environment_variables():
     flexmock(module.os.environ).should_receive('get').and_return('True')
     flexmock(module).should_receive('to_bool').and_return(True)
 
@@ -92,7 +96,7 @@ def test_should_do_markup_prefers_config_value_to_PY_COLORS():
     )
 
 
-def test_should_do_markup_prefers_no_color_value_to_PY_COLORS():
+def test_should_do_markup_prefers_no_color_value_to_environment_variables():
     flexmock(module.os.environ).should_receive('get').and_return('True')
     flexmock(module).should_receive('to_bool').and_return(True)
 
@@ -107,13 +111,42 @@ def test_should_do_markup_respects_interactive_console_value():
 
 
 def test_should_do_markup_prefers_PY_COLORS_to_interactive_console_value():
-    flexmock(module.os.environ).should_receive('get').and_return('True')
+    flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
+        'True'
+    )
+    flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(None)
     flexmock(module).should_receive('to_bool').and_return(True)
     flexmock(module).should_receive('interactive_console').and_return(False)
 
     assert module.should_do_markup(no_color=False, configs={}) is True
 
 
+def test_should_do_markup_prefers_NO_COLOR_to_interactive_console_value():
+    flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(None)
+    flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return('True')
+    flexmock(module).should_receive('interactive_console').and_return(False)
+
+    assert module.should_do_markup(no_color=False, configs={}) is False
+
+
+def test_should_do_markup_respects_NO_COLOR_environment_variable():
+    flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return('True')
+    flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(None)
+
+    assert module.should_do_markup(no_color=False, configs={}) is False
+
+
+def test_should_do_markup_prefers_NO_COLOR_to_PY_COLORS():
+    flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
+        'True'
+    )
+    flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(
+        'SomeValue'
+    )
+
+    assert module.should_do_markup(no_color=False, configs={}) is False
+
+
 def test_multi_stream_handler_logs_to_handler_for_log_level():
     error_handler = flexmock()
     error_handler.should_receive('emit').once()