summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2014-12-22 15:17:59 -0500
committerMike Frysinger <vapier@google.com>2014-12-30 18:50:05 -0500
commit902665bce668a58996de657a65c5ae3002a8810b (patch)
tree04d5093d86a398acb3be824cec60b89076674258
parent3eb87cec5cae5f43becfe9fd1ff94de855cac08c (diff)
downloadgit-repo-902665bce668a58996de657a65c5ae3002a8810b.tar.gz
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
-rw-r--r--color.py27
-rwxr-xr-xmain.py6
2 files changed, 31 insertions, 2 deletions
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):
83 return code 83 return code
84 84
85 85
86DEFAULT = None
87
88def SetDefaultColoring(state):
89 """Set coloring behavior to |state|.
90
91 This is useful for overriding config options via the command line.
92 """
93 if state is None:
94 # Leave it alone -- return quick!
95 return
96
97 global DEFAULT
98 state = state.lower()
99 if state in ('auto',):
100 DEFAULT = state
101 elif state in ('always', 'yes', 'true', True):
102 DEFAULT = 'always'
103 elif state in ('never', 'no', 'false', False):
104 DEFAULT = 'never'
105
106
86class Coloring(object): 107class Coloring(object):
87 def __init__(self, config, section_type): 108 def __init__(self, config, section_type):
88 self._section = 'color.%s' % section_type 109 self._section = 'color.%s' % section_type
89 self._config = config 110 self._config = config
90 self._out = sys.stdout 111 self._out = sys.stdout
91 112
92 on = self._config.GetString(self._section) 113 on = DEFAULT
93 if on is None: 114 if on is None:
94 on = self._config.GetString('color.ui') 115 on = self._config.GetString(self._section)
116 if on is None:
117 on = self._config.GetString('color.ui')
95 118
96 if on == 'auto': 119 if on == 'auto':
97 if pager.active or os.isatty(1): 120 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:
36except ImportError: 36except ImportError:
37 kerberos = None 37 kerberos = None
38 38
39from color import SetDefaultColoring
39from trace import SetTrace 40from trace import SetTrace
40from git_command import git, GitCommand 41from git_command import git, GitCommand
41from git_config import init_ssh, close_ssh 42from git_config import init_ssh, close_ssh
@@ -69,6 +70,9 @@ global_options.add_option('-p', '--paginate',
69global_options.add_option('--no-pager', 70global_options.add_option('--no-pager',
70 dest='no_pager', action='store_true', 71 dest='no_pager', action='store_true',
71 help='disable the pager') 72 help='disable the pager')
73global_options.add_option('--color',
74 choices=('auto', 'always', 'never'), default=None,
75 help='control color usage: auto, always, never')
72global_options.add_option('--trace', 76global_options.add_option('--trace',
73 dest='trace', action='store_true', 77 dest='trace', action='store_true',
74 help='trace git command execution') 78 help='trace git command execution')
@@ -113,6 +117,8 @@ class _Repo(object):
113 print('fatal: invalid usage of --version', file=sys.stderr) 117 print('fatal: invalid usage of --version', file=sys.stderr)
114 return 1 118 return 1
115 119
120 SetDefaultColoring(gopts.color)
121
116 try: 122 try:
117 cmd = self.commands[name] 123 cmd = self.commands[name]
118 except KeyError: 124 except KeyError: