45
44
ud = difflib.unified_diff(oldlines, newlines,
46
45
fromfile=old_label, tofile=new_label)
48
48
# work-around for difflib being too smart for its own good
49
49
# if /dev/null is "1,0", patch won't recognize it as /dev/null
52
51
ud[2] = ud[2].replace('-1,0', '-0,0')
55
53
ud[2] = ud[2].replace('+1,0', '+0,0')
54
# work around for difflib emitting random spaces after the label
55
ud[0] = ud[0][:-2] + '\n'
56
ud[1] = ud[1][:-2] + '\n'
58
59
to_file.write(line)
156
153
The more general form is show_diff_trees(), where the caller
157
154
supplies any two trees.
162
161
old_tree = b.basis_tree()
164
old_tree = b.revision_tree(b.lookup_revision(revision))
163
old_tree = b.revision_tree(revision.in_history(b).rev_id)
166
if revision2 == None:
165
if revision2 is None:
167
166
new_tree = b.working_tree()
169
new_tree = b.revision_tree(b.lookup_revision(revision2))
168
new_tree = b.revision_tree(revision2.in_history(b).rev_id)
171
show_diff_trees(old_tree, new_tree, sys.stdout, specific_files,
170
show_diff_trees(old_tree, new_tree, output, specific_files,
172
171
external_diff_options)
209
208
specific_files=specific_files)
211
210
for path, file_id, kind in delta.removed:
212
print >>to_file, '*** removed %s %r' % (kind, path)
211
print >>to_file, '=== removed %s %r' % (kind, path)
213
212
if kind == 'file':
214
213
diff_file(old_label + path,
215
214
old_tree.get_file(file_id).readlines(),
220
218
for path, file_id, kind in delta.added:
221
print >>to_file, '*** added %s %r' % (kind, path)
219
print >>to_file, '=== added %s %r' % (kind, path)
222
220
if kind == 'file':
223
221
diff_file(DEVNULL,
225
223
new_label + path,
226
224
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)
226
for (old_path, new_path, file_id, kind,
227
text_modified, meta_modified) in delta.renamed:
228
prop_str = get_prop_change(meta_modified)
229
print >>to_file, '=== renamed %s %r => %r%s' % (
230
kind, old_path, new_path, prop_str)
231
_maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
232
new_label, new_path, new_tree,
233
text_modified, kind, to_file, diff_file)
234
for path, file_id, kind, text_modified, meta_modified in delta.modified:
235
prop_str = get_prop_change(meta_modified)
236
print >>to_file, '=== modified %s %r%s' % (kind, path, prop_str)
231
237
if text_modified:
238
_maybe_diff_file_or_symlink(old_label, path, old_tree, file_id,
239
new_label, path, new_tree,
240
True, kind, to_file, diff_file)
243
def get_prop_change(meta_modified):
245
return " (properties changed)"
250
def _maybe_diff_file_or_symlink(old_label, old_path, old_tree, file_id,
251
new_label, new_path, new_tree, text_modified,
252
kind, to_file, diff_file):
232
255
diff_file(old_label + old_path,
233
256
old_tree.get_file(file_id).readlines(),
234
257
new_label + new_path,
235
258
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(),
260
elif kind == 'symlink':
261
_diff_symlink(old_tree, new_tree, file_id, to_file)
263
def _diff_symlink(old_tree, new_tree, file_id, to_file):
264
t1 = old_tree.get_symlink_target(file_id)
265
t2 = new_tree.get_symlink_target(file_id)
266
print >>to_file, '=== target changed %r => %r' % (t1, t2)