142
141
oldtmpf.close() # and delete
147
def show_diff(b, revision, specific_files, external_diff_options=None,
148
revision2=None, output=None):
144
def show_diff(b, from_spec, specific_files, external_diff_options=None,
145
revision2=None, output=None, b2=None):
149
146
"""Shortcut for showing the diff to the working tree.
155
None for each, or otherwise the old revision to compare against.
152
None for 'basis tree', or otherwise the old revision to compare against.
157
154
The more general form is show_diff_trees(), where the caller
158
155
supplies any two trees.
162
159
output = sys.stdout
165
old_tree = b.basis_tree()
161
if from_spec is None:
163
old_tree = b.basis_tree()
165
old_tree = b.working_tree()
167
old_tree = b.revision_tree(revision.in_history(b).rev_id)
167
old_tree = b.revision_tree(from_spec.in_history(b).rev_id)
169
169
if revision2 is None:
170
new_tree = b.working_tree()
171
new_tree = b.working_tree()
173
new_tree = b2.working_tree()
172
175
new_tree = b.revision_tree(revision2.in_history(b).rev_id)
174
show_diff_trees(old_tree, new_tree, output, specific_files,
175
external_diff_options)
177
return show_diff_trees(old_tree, new_tree, output, specific_files,
178
external_diff_options)
211
214
delta = compare_trees(old_tree, new_tree, want_unchanged=False,
212
215
specific_files=specific_files)
214
218
for path, file_id, kind in delta.removed:
215
220
print >>to_file, '=== removed %s %r' % (kind, path)
217
diff_file(old_label + path,
218
old_tree.get_file(file_id).readlines(),
221
old_tree.inventory[file_id].diff(diff_file, old_label + path, old_tree,
222
DEVNULL, None, None, to_file)
223
223
for path, file_id, kind in delta.added:
224
225
print >>to_file, '=== added %s %r' % (kind, path)
229
new_tree.get_file(file_id).readlines(),
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)
226
new_tree.inventory[file_id].diff(diff_file, new_label + path, new_tree,
227
DEVNULL, None, None, to_file,
229
for (old_path, new_path, file_id, kind,
230
text_modified, meta_modified) in delta.renamed:
232
prop_str = get_prop_change(meta_modified)
233
print >>to_file, '=== renamed %s %r => %r%s' % (
234
kind, old_path, new_path, prop_str)
235
_maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
236
new_label, new_path, new_tree,
237
text_modified, kind, to_file, diff_file)
238
for path, file_id, kind, text_modified, meta_modified in delta.modified:
240
prop_str = get_prop_change(meta_modified)
241
print >>to_file, '=== modified %s %r%s' % (kind, path, prop_str)
234
242
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(),
241
for path, file_id, kind in delta.modified:
242
print >>to_file, '=== modified %s %r' % (kind, path)
244
diff_file(old_label + path,
245
old_tree.get_file(file_id).readlines(),
247
new_tree.get_file(file_id).readlines(),
243
_maybe_diff_file_or_symlink(old_label, path, old_tree, file_id,
244
new_label, path, new_tree,
245
True, kind, to_file, diff_file)
249
def get_prop_change(meta_modified):
251
return " (properties changed)"
256
def _maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
257
new_label, new_path, new_tree, text_modified,
258
kind, to_file, diff_file):
260
new_entry = new_tree.inventory[file_id]
261
old_tree.inventory[file_id].diff(diff_file,
262
old_label + old_path, old_tree,
263
new_label + new_path, new_entry,