diff --git a/color.py b/color.py index 7970198a..b2799286 100644 --- a/color.py +++ b/color.py @@ -83,15 +83,38 @@ def _Color(fg = None, bg = None, attr = None): return code +DEFAULT = None + +def SetDefaultColoring(state): + """Set coloring behavior to |state|. + + This is useful for overriding config options via the command line. + """ + if state is None: + # Leave it alone -- return quick! + return + + global DEFAULT + state = state.lower() + if state in ('auto',): + DEFAULT = state + elif state in ('always', 'yes', 'true', True): + DEFAULT = 'always' + elif state in ('never', 'no', 'false', False): + DEFAULT = 'never' + + class Coloring(object): def __init__(self, config, section_type): self._section = 'color.%s' % section_type self._config = config self._out = sys.stdout - on = self._config.GetString(self._section) + on = DEFAULT if on is None: - on = self._config.GetString('color.ui') + on = self._config.GetString(self._section) + if on is None: + on = self._config.GetString('color.ui') if on == 'auto': if pager.active or os.isatty(1): diff --git a/main.py b/main.py index 72fb39b0..47f083df 100755 --- a/main.py +++ b/main.py @@ -36,6 +36,7 @@ try: except ImportError: kerberos = None +from color import SetDefaultColoring from trace import SetTrace from git_command import git, GitCommand from git_config import init_ssh, close_ssh @@ -69,6 +70,9 @@ global_options.add_option('-p', '--paginate', global_options.add_option('--no-pager', dest='no_pager', action='store_true', help='disable the pager') +global_options.add_option('--color', + choices=('auto', 'always', 'never'), default=None, + help='control color usage: auto, always, never') global_options.add_option('--trace', dest='trace', action='store_true', help='trace git command execution') @@ -113,6 +117,8 @@ class _Repo(object): print('fatal: invalid usage of --version', file=sys.stderr) return 1 + SetDefaultColoring(gopts.color) + try: cmd = self.commands[name] except KeyError: