add a global --color option

If you want to turn off colors for commands, you have to manually adjust
the git config settings (in various locations).  If you're writing scripts
though, you often don't want to modify those locations.  Add a commandline
option to explicitly control things.

The default behavior is unchanged -- we still scan the config files.

Change-Id: I54a3fd8e1918bac180aadd7c7d3004f069b02522
This commit is contained in:
Mike Frysinger 2014-12-22 15:17:59 -05:00
parent 3eb87cec5c
commit 902665bce6
2 changed files with 31 additions and 2 deletions

View File

@ -83,12 +83,35 @@ def _Color(fg = None, bg = None, attr = None):
return code 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): class Coloring(object):
def __init__(self, config, section_type): def __init__(self, config, section_type):
self._section = 'color.%s' % section_type self._section = 'color.%s' % section_type
self._config = config self._config = config
self._out = sys.stdout self._out = sys.stdout
on = DEFAULT
if on is None:
on = self._config.GetString(self._section) on = self._config.GetString(self._section)
if on is None: if on is None:
on = self._config.GetString('color.ui') on = self._config.GetString('color.ui')

View File

@ -36,6 +36,7 @@ try:
except ImportError: except ImportError:
kerberos = None kerberos = None
from color import SetDefaultColoring
from trace import SetTrace from trace import SetTrace
from git_command import git, GitCommand from git_command import git, GitCommand
from git_config import init_ssh, close_ssh from git_config import init_ssh, close_ssh
@ -69,6 +70,9 @@ global_options.add_option('-p', '--paginate',
global_options.add_option('--no-pager', global_options.add_option('--no-pager',
dest='no_pager', action='store_true', dest='no_pager', action='store_true',
help='disable the pager') 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', global_options.add_option('--trace',
dest='trace', action='store_true', dest='trace', action='store_true',
help='trace git command execution') help='trace git command execution')
@ -113,6 +117,8 @@ class _Repo(object):
print('fatal: invalid usage of --version', file=sys.stderr) print('fatal: invalid usage of --version', file=sys.stderr)
return 1 return 1
SetDefaultColoring(gopts.color)
try: try:
cmd = self.commands[name] cmd = self.commands[name]
except KeyError: except KeyError: