~benoit.pierre/bzrtools/shell_improvements

« back to all changes in this revision

Viewing changes to colordiff.py

  • Committer: Benoît Pierre
  • Date: 2008-11-30 16:02:59 UTC
  • mfrom: (682.1.5 bzrtools)
  • Revision ID: benoit.pierre@gmail.com-20081130160259-3klyr8tq3asr7kbp
Merge with upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
 
43
43
class DiffWriter(object):
44
44
 
45
 
    colors = {
46
 
        'metaline':      'darkyellow',
47
 
        'plain':         'darkwhite',
48
 
        'newtext':       'darkblue',
49
 
        'oldtext':       'darkred',
50
 
        'diffstuff':     'darkgreen',
51
 
        'trailingspace': 'yellow',
52
 
        'leadingtabs':   'magenta',
53
 
        'longline':      'cyan',
54
 
    }
55
 
 
56
 
    def __init__(self, target, check_style=False):
 
45
    def __init__(self, target, check_style=False, color='always'):
57
46
        self.target = target
58
47
        self.lp = LineParser()
59
48
        self.chunks = []
60
 
        self._read_colordiffrc('/etc/colordiffrc')
61
 
        self._read_colordiffrc(expanduser('~/.colordiffrc'))
 
49
        from terminal import has_ansi_colors
 
50
        if 'always' == color or ('auto' == color and has_ansi_colors()):
 
51
            self.colors = {
 
52
                'metaline':      'darkyellow',
 
53
                'plain':         'darkwhite',
 
54
                'newtext':       'darkblue',
 
55
                'oldtext':       'darkred',
 
56
                'diffstuff':     'darkgreen',
 
57
                'trailingspace': 'yellow',
 
58
                'leadingtabs':   'magenta',
 
59
                'longline':      'cyan',
 
60
            }
 
61
            self._read_colordiffrc('/etc/colordiffrc')
 
62
            self._read_colordiffrc(expanduser('~/.colordiffrc'))
 
63
        else:
 
64
            self.colors = {
 
65
                'metaline':      None,
 
66
                'plain':         None,
 
67
                'newtext':       None,
 
68
                'oldtext':       None,
 
69
                'diffstuff':     None,
 
70
                'trailingspace': None,
 
71
                'leadingtabs':   None,
 
72
                'longline':      None,
 
73
            }
62
74
        self.added_leading_tabs = 0
63
75
        self.added_trailing_whitespace = 0
64
76
        self.spurious_whitespace = 0
179
191
        self._old_lines, self._new_lines = ([], [])
180
192
 
181
193
 
182
 
def colordiff(check_style, *args, **kwargs):
 
194
def auto_diff_writer(output):
 
195
    return DiffWriter(output, color='auto')
 
196
 
 
197
 
 
198
def colordiff(color, check_style, *args, **kwargs):
183
199
    real_stdout = sys.stdout
184
 
    dw = DiffWriter(real_stdout, check_style)
 
200
    dw = DiffWriter(real_stdout, check_style, color)
185
201
    sys.stdout = dw
186
202
    try:
187
203
        get_cmd_object('diff').run(*args, **kwargs)