~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

  • Committer: abentley
  • Date: 2005-10-14 03:50:50 UTC
  • mto: (1185.25.1)
  • mto: This revision was merged to the branch mainline in revision 1460.
  • Revision ID: abentley@lappy-20051014035050-d779472ccb599a51
semi-broke merge

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
 
177
 
    return show_diff_trees(old_tree, new_tree, output, specific_files,
178
 
                           external_diff_options)
 
170
    show_diff_trees(old_tree, new_tree, output, specific_files,
 
171
                    external_diff_options)
179
172
 
180
173
 
181
174
 
214
207
    delta = compare_trees(old_tree, new_tree, want_unchanged=False,
215
208
                          specific_files=specific_files)
216
209
 
217
 
    has_changes = 0
218
210
    for path, file_id, kind in delta.removed:
219
 
        has_changes = 1
220
211
        print >>to_file, '=== removed %s %r' % (kind, path)
221
212
        old_tree.inventory[file_id].diff(diff_file, old_label + path, old_tree,
222
213
                                         DEVNULL, None, None, to_file)
223
214
    for path, file_id, kind in delta.added:
224
 
        has_changes = 1
225
215
        print >>to_file, '=== added %s %r' % (kind, path)
226
216
        new_tree.inventory[file_id].diff(diff_file, new_label + path, new_tree,
227
217
                                         DEVNULL, None, None, to_file, 
228
218
                                         reverse=True)
229
219
    for (old_path, new_path, file_id, kind,
230
220
         text_modified, meta_modified) in delta.renamed:
231
 
        has_changes = 1
232
221
        prop_str = get_prop_change(meta_modified)
233
222
        print >>to_file, '=== renamed %s %r => %r%s' % (
234
223
                          kind, old_path, new_path, prop_str)
236
225
                                    new_label, new_path, new_tree,
237
226
                                    text_modified, kind, to_file, diff_file)
238
227
    for path, file_id, kind, text_modified, meta_modified in delta.modified:
239
 
        has_changes = 1
240
228
        prop_str = get_prop_change(meta_modified)
241
229
        print >>to_file, '=== modified %s %r%s' % (kind, path, prop_str)
242
230
        if text_modified:
243
231
            _maybe_diff_file_or_symlink(old_label, path, old_tree, file_id,
244
232
                                        new_label, path, new_tree,
245
233
                                        True, kind, to_file, diff_file)
246
 
    return has_changes
247
234
    
248
235
 
249
236
def get_prop_change(meta_modified):