~ubuntu-branches/ubuntu/oneiric/bzrtools/oneiric

« back to all changes in this revision

Viewing changes to colordiff.py

  • Committer: Bazaar Package Importer
  • Author(s): Jelmer Vernooij
  • Date: 2009-03-11 02:36:45 UTC
  • mfrom: (1.2.3 upstream) (4.1.39 jaunty)
  • Revision ID: james.westby@ubuntu.com-20090311023645-30mtvwu8pi5ewoee
New upstream release.

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):
 
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()
 
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
            }
61
74
        self.added_leading_tabs = 0
62
75
        self.added_trailing_whitespace = 0
63
76
        self.spurious_whitespace = 0
67
80
        self._old_lines = []
68
81
        self.check_style = check_style
69
82
 
70
 
    def _read_colordiffrc(self):
71
 
        path = expanduser('~/.colordiffrc')
 
83
    def _read_colordiffrc(self, path):
72
84
        try:
73
85
            f = open(path, 'r')
74
86
        except IOError:
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)