45
44
ud = difflib.unified_diff(oldlines, newlines,
46
fromfile=old_label, tofile=new_label)
45
fromfile=old_filename+'\t',
46
tofile=new_filename+'\t')
48
49
# work-around for difflib being too smart for its own good
49
50
# if /dev/null is "1,0", patch won't recognize it as /dev/null
52
52
ud[2] = ud[2].replace('-1,0', '-0,0')
55
54
ud[2] = ud[2].replace('+1,0', '+0,0')
55
# work around for difflib emitting random spaces after the label
56
ud[0] = ud[0][:-2] + '\n'
57
ud[1] = ud[1][:-2] + '\n'
58
60
to_file.write(line)
141
141
oldtmpf.close() # and delete
146
def show_diff(b, revision, specific_files, external_diff_options=None,
144
def show_diff(b, from_spec, specific_files, external_diff_options=None,
145
revision2=None, output=None, b2=None):
148
146
"""Shortcut for showing the diff to the working tree.
154
None for each, or otherwise the old revision to compare against.
152
None for 'basis tree', or otherwise the old revision to compare against.
156
154
The more general form is show_diff_trees(), where the caller
157
155
supplies any two trees.
162
old_tree = b.basis_tree()
164
old_tree = b.revision_tree(b.lookup_revision(revision))
166
if revision2 == None:
167
new_tree = b.working_tree()
169
new_tree = b.revision_tree(b.lookup_revision(revision2))
171
show_diff_trees(old_tree, new_tree, sys.stdout, specific_files,
172
external_diff_options)
161
if from_spec is None:
163
old_tree = b.basis_tree()
165
old_tree = b.working_tree()
167
old_tree = b.revision_tree(from_spec.in_history(b).rev_id)
169
if revision2 is None:
171
new_tree = b.working_tree()
173
new_tree = b2.working_tree()
175
new_tree = b.revision_tree(revision2.in_history(b).rev_id)
177
return show_diff_trees(old_tree, new_tree, output, specific_files,
178
external_diff_options)
208
229
delta = compare_trees(old_tree, new_tree, want_unchanged=False,
209
230
specific_files=specific_files)
211
233
for path, file_id, kind in delta.removed:
212
print >>to_file, '*** removed %s %r' % (kind, path)
214
diff_file(old_label + path,
215
old_tree.get_file(file_id).readlines(),
235
print >>to_file, '=== removed %s %r' % (kind, path)
236
old_tree.inventory[file_id].diff(diff_file, old_label + path, old_tree,
237
DEVNULL, None, None, to_file)
220
238
for path, file_id, kind in delta.added:
221
print >>to_file, '*** added %s %r' % (kind, path)
226
new_tree.get_file(file_id).readlines(),
229
for old_path, new_path, file_id, kind, text_modified in delta.renamed:
230
print >>to_file, '*** renamed %s %r => %r' % (kind, old_path, new_path)
240
print >>to_file, '=== added %s %r' % (kind, path)
241
new_tree.inventory[file_id].diff(diff_file, new_label + path, new_tree,
242
DEVNULL, None, None, to_file,
244
for (old_path, new_path, file_id, kind,
245
text_modified, meta_modified) in delta.renamed:
247
prop_str = get_prop_change(meta_modified)
248
print >>to_file, '=== renamed %s %r => %r%s' % (
249
kind, old_path, new_path, prop_str)
250
_maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
251
new_label, new_path, new_tree,
252
text_modified, kind, to_file, diff_file)
253
for path, file_id, kind, text_modified, meta_modified in delta.modified:
255
prop_str = get_prop_change(meta_modified)
256
print >>to_file, '=== modified %s %r%s' % (kind, path, prop_str)
231
257
if text_modified:
232
diff_file(old_label + old_path,
233
old_tree.get_file(file_id).readlines(),
234
new_label + new_path,
235
new_tree.get_file(file_id).readlines(),
238
for path, file_id, kind in delta.modified:
239
print >>to_file, '*** modified %s %r' % (kind, path)
241
diff_file(old_label + path,
242
old_tree.get_file(file_id).readlines(),
244
new_tree.get_file(file_id).readlines(),
258
_maybe_diff_file_or_symlink(old_label, path, old_tree, file_id,
259
new_label, path, new_tree,
260
True, kind, to_file, diff_file)
264
def get_prop_change(meta_modified):
266
return " (properties changed)"
271
def _maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
272
new_label, new_path, new_tree, text_modified,
273
kind, to_file, diff_file):
275
new_entry = new_tree.inventory[file_id]
276
old_tree.inventory[file_id].diff(diff_file,
277
old_label + old_path, old_tree,
278
new_label + new_path, new_entry,