~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

Handled more pipe errors for display commands.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# invoke callbacks on an object.  That object can either accumulate a
23
23
# list, write them out directly, etc etc.
24
24
 
25
 
def internal_diff(old_filename, oldlines, new_filename, newlines, to_file):
 
25
def internal_diff(old_label, oldlines, new_label, newlines, to_file):
26
26
    import difflib
27
27
    
28
28
    # FIXME: difflib is wrong if there is no trailing newline.
42
42
        return
43
43
 
44
44
    ud = difflib.unified_diff(oldlines, newlines,
45
 
                              fromfile=old_filename+'\t', 
46
 
                              tofile=new_filename+'\t')
 
45
                              fromfile=old_label, tofile=new_label)
47
46
 
48
47
    ud = list(ud)
49
48
    # work-around for difflib being too smart for its own good
63
62
    print >>to_file
64
63
 
65
64
 
66
 
def external_diff(old_filename, oldlines, new_filename, newlines, to_file,
 
65
def external_diff(old_label, oldlines, new_label, newlines, to_file,
67
66
                  diff_opts):
68
67
    """Display a diff by calling out to the external diff program."""
69
68
    import sys
98
97
        if not diff_opts:
99
98
            diff_opts = []
100
99
        diffcmd = ['diff',
101
 
                   '--label', old_filename+'\t',
 
100
                   '--label', old_label,
102
101
                   oldtmpf.name,
103
 
                   '--label', new_filename+'\t',
 
102
                   '--label', new_label,
104
103
                   newtmpf.name]
105
104
 
106
105
        # diff only allows one style to be specified; they don't override.
142
141
        newtmpf.close()
143
142
 
144
143
def show_diff(b, from_spec, specific_files, external_diff_options=None,
145
 
              revision2=None, output=None, b2=None):
 
144
              revision2=None, output=None):
146
145
    """Shortcut for showing the diff to the working tree.
147
146
 
148
147
    b
159
158
        output = sys.stdout
160
159
 
161
160
    if from_spec is None:
162
 
        if b2 is None:
163
 
            old_tree = b.basis_tree()
164
 
        else:
165
 
            old_tree = b.working_tree()
 
161
        old_tree = b.basis_tree()
166
162
    else:
167
163
        old_tree = b.revision_tree(from_spec.in_history(b).rev_id)
168
164
 
169
165
    if revision2 is None:
170
 
        if b2 is None:
171
 
            new_tree = b.working_tree()
172
 
        else:
173
 
            new_tree = b2.working_tree()
 
166
        new_tree = b.working_tree()
174
167
    else:
175
168
        new_tree = b.revision_tree(revision2.in_history(b).rev_id)
176
169