~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

  • Committer: Aaron Bentley
  • Date: 2005-10-20 02:57:55 UTC
  • mto: (1185.25.1)
  • mto: This revision was merged to the branch mainline in revision 1474.
  • Revision ID: aaron.bentley@utoronto.ca-20051020025755-e03df41c52aa3156
tweaked spacing

Show diffs side-by-side

added added

removed removed

Lines of Context:
62
62
    print >>to_file
63
63
 
64
64
 
65
 
 
66
 
 
67
65
def external_diff(old_label, oldlines, new_label, newlines, to_file,
68
66
                  diff_opts):
69
67
    """Display a diff by calling out to the external diff program."""
141
139
    finally:
142
140
        oldtmpf.close()                 # and delete
143
141
        newtmpf.close()
144
 
    
145
 
 
146
 
 
147
 
def show_diff(b, revision, specific_files, external_diff_options=None,
 
142
 
 
143
def show_diff(b, from_spec, specific_files, external_diff_options=None,
148
144
              revision2=None, output=None):
149
145
    """Shortcut for showing the diff to the working tree.
150
146
 
152
148
        Branch.
153
149
 
154
150
    revision
155
 
        None for each, or otherwise the old revision to compare against.
 
151
        None for 'basis tree', or otherwise the old revision to compare against.
156
152
    
157
153
    The more general form is show_diff_trees(), where the caller
158
154
    supplies any two trees.
161
157
        import sys
162
158
        output = sys.stdout
163
159
 
164
 
    if revision is None:
 
160
    if from_spec is None:
165
161
        old_tree = b.basis_tree()
166
162
    else:
167
 
        old_tree = b.revision_tree(revision.in_history(b).rev_id)
 
163
        old_tree = b.revision_tree(from_spec.in_history(b).rev_id)
168
164
 
169
165
    if revision2 is None:
170
166
        new_tree = b.working_tree()
213
209
 
214
210
    for path, file_id, kind in delta.removed:
215
211
        print >>to_file, '=== removed %s %r' % (kind, path)
216
 
        if kind == 'file':
217
 
            diff_file(old_label + path,
218
 
                      old_tree.get_file(file_id).readlines(),
219
 
                      DEVNULL, 
220
 
                      [],
221
 
                      to_file)
222
 
 
 
212
        old_tree.inventory[file_id].diff(diff_file, old_label + path, old_tree,
 
213
                                         DEVNULL, None, None, to_file)
223
214
    for path, file_id, kind in delta.added:
224
215
        print >>to_file, '=== added %s %r' % (kind, path)
225
 
        if kind == 'file':
226
 
            diff_file(DEVNULL,
227
 
                      [],
228
 
                      new_label + path,
229
 
                      new_tree.get_file(file_id).readlines(),
230
 
                      to_file)
231
 
 
232
 
    for old_path, new_path, file_id, kind, text_modified in delta.renamed:
233
 
        print >>to_file, '=== renamed %s %r => %r' % (kind, old_path, new_path)
 
216
        new_tree.inventory[file_id].diff(diff_file, new_label + path, new_tree,
 
217
                                         DEVNULL, None, None, to_file, 
 
218
                                         reverse=True)
 
219
    for (old_path, new_path, file_id, kind,
 
220
         text_modified, meta_modified) in delta.renamed:
 
221
        prop_str = get_prop_change(meta_modified)
 
222
        print >>to_file, '=== renamed %s %r => %r%s' % (
 
223
                          kind, old_path, new_path, prop_str)
 
224
        _maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
 
225
                                    new_label, new_path, new_tree,
 
226
                                    text_modified, kind, to_file, diff_file)
 
227
    for path, file_id, kind, text_modified, meta_modified in delta.modified:
 
228
        prop_str = get_prop_change(meta_modified)
 
229
        print >>to_file, '=== modified %s %r%s' % (kind, path, prop_str)
234
230
        if text_modified:
235
 
            diff_file(old_label + old_path,
236
 
                      old_tree.get_file(file_id).readlines(),
237
 
                      new_label + new_path,
238
 
                      new_tree.get_file(file_id).readlines(),
239
 
                      to_file)
240
 
 
241
 
    for path, file_id, kind in delta.modified:
242
 
        print >>to_file, '=== modified %s %r' % (kind, path)
243
 
        if kind == 'file':
244
 
            diff_file(old_label + path,
245
 
                      old_tree.get_file(file_id).readlines(),
246
 
                      new_label + path,
247
 
                      new_tree.get_file(file_id).readlines(),
248
 
                      to_file)
249
 
 
250
 
 
251
 
 
252
 
 
253
 
 
 
231
            _maybe_diff_file_or_symlink(old_label, path, old_tree, file_id,
 
232
                                        new_label, path, new_tree,
 
233
                                        True, kind, to_file, diff_file)
 
234
    
 
235
 
 
236
def get_prop_change(meta_modified):
 
237
    if meta_modified:
 
238
        return " (properties changed)"
 
239
    else:
 
240
        return  ""
 
241
 
 
242
 
 
243
def _maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
 
244
                                new_label, new_path, new_tree, text_modified,
 
245
                                kind, to_file, diff_file):
 
246
    if text_modified:
 
247
        new_entry = new_tree.inventory[file_id]
 
248
        old_tree.inventory[file_id].diff(diff_file,
 
249
                                         old_label + old_path, old_tree,
 
250
                                         new_label + new_path, new_entry, 
 
251
                                         new_tree, to_file)