llnl.util.tty.color._force_color: init in global scope (#44036)
Currently SPACK_COLOR=always is not respected in the build process on macOS, because the global `_force_color` is re-evaluated in global scope during module setup, where it is always `None`. So, move global init bits from main.py to the module itself.
This commit is contained in:
parent
b35ec605fe
commit
bcd05407b8
2 changed files with 27 additions and 18 deletions
|
@ -59,6 +59,7 @@
|
||||||
|
|
||||||
To output an @, use '@@'. To output a } inside braces, use '}}'.
|
To output an @, use '@@'. To output a } inside braces, use '}}'.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
@ -101,9 +102,29 @@ def __init__(self, message):
|
||||||
# Mapping from color arguments to values for tty.set_color
|
# Mapping from color arguments to values for tty.set_color
|
||||||
color_when_values = {"always": True, "auto": None, "never": False}
|
color_when_values = {"always": True, "auto": None, "never": False}
|
||||||
|
|
||||||
# Force color; None: Only color if stdout is a tty
|
|
||||||
# True: Always colorize output, False: Never colorize output
|
def _color_when_value(when):
|
||||||
_force_color = None
|
"""Raise a ValueError for an invalid color setting.
|
||||||
|
|
||||||
|
Valid values are 'always', 'never', and 'auto', or equivalently,
|
||||||
|
True, False, and None.
|
||||||
|
"""
|
||||||
|
if when in color_when_values:
|
||||||
|
return color_when_values[when]
|
||||||
|
elif when not in color_when_values.values():
|
||||||
|
raise ValueError("Invalid color setting: %s" % when)
|
||||||
|
return when
|
||||||
|
|
||||||
|
|
||||||
|
def _color_from_environ() -> Optional[bool]:
|
||||||
|
try:
|
||||||
|
return _color_when_value(os.environ.get("SPACK_COLOR", "auto"))
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
#: When `None` colorize when stdout is tty, when `True` or `False` always or never colorize resp.
|
||||||
|
_force_color = _color_from_environ()
|
||||||
|
|
||||||
|
|
||||||
def try_enable_terminal_color_on_windows():
|
def try_enable_terminal_color_on_windows():
|
||||||
|
@ -164,19 +185,6 @@ def _err_check(result, func, args):
|
||||||
debug("Unable to support color on Windows terminal")
|
debug("Unable to support color on Windows terminal")
|
||||||
|
|
||||||
|
|
||||||
def _color_when_value(when):
|
|
||||||
"""Raise a ValueError for an invalid color setting.
|
|
||||||
|
|
||||||
Valid values are 'always', 'never', and 'auto', or equivalently,
|
|
||||||
True, False, and None.
|
|
||||||
"""
|
|
||||||
if when in color_when_values:
|
|
||||||
return color_when_values[when]
|
|
||||||
elif when not in color_when_values.values():
|
|
||||||
raise ValueError("Invalid color setting: %s" % when)
|
|
||||||
return when
|
|
||||||
|
|
||||||
|
|
||||||
def get_color_when():
|
def get_color_when():
|
||||||
"""Return whether commands should print color or not."""
|
"""Return whether commands should print color or not."""
|
||||||
if _force_color is not None:
|
if _force_color is not None:
|
||||||
|
|
|
@ -427,7 +427,7 @@ def make_argument_parser(**kwargs):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--color",
|
"--color",
|
||||||
action="store",
|
action="store",
|
||||||
default=os.environ.get("SPACK_COLOR", "auto"),
|
default=None,
|
||||||
choices=("always", "never", "auto"),
|
choices=("always", "never", "auto"),
|
||||||
help="when to colorize output (default: auto)",
|
help="when to colorize output (default: auto)",
|
||||||
)
|
)
|
||||||
|
@ -622,7 +622,8 @@ def setup_main_options(args):
|
||||||
# with color
|
# with color
|
||||||
color.try_enable_terminal_color_on_windows()
|
color.try_enable_terminal_color_on_windows()
|
||||||
# when to use color (takes always, auto, or never)
|
# when to use color (takes always, auto, or never)
|
||||||
color.set_color_when(args.color)
|
if args.color is not None:
|
||||||
|
color.set_color_when(args.color)
|
||||||
|
|
||||||
|
|
||||||
def allows_unknown_args(command):
|
def allows_unknown_args(command):
|
||||||
|
|
Loading…
Reference in a new issue