108
def show(self, to_file, show_ids=False, show_unchanged=False,
109
short_status=False, indent='',
111
"""Output this delta in status-like form to to_file.
113
:param to_file: A file-like object where the output is displayed.
115
:param show_ids: Output the file ids if True.
117
:param show_unchanged: Output the unchanged files if True.
119
:param short_status: Single-line status if True.
121
:param indent: Added at the beginning of all output lines (for merged
124
:param filter: A callable receiving a path and a file id and
125
returning True if the path should be displayed.
128
def decorate_path(path, kind, meta_modified=None):
129
if kind == 'directory':
131
elif kind == 'symlink':
137
def show_more_renamed(item):
138
(oldpath, file_id, kind,
139
text_modified, meta_modified, newpath) = item
140
dec_new_path = decorate_path(newpath, kind, meta_modified)
141
to_file.write(' => %s' % dec_new_path)
142
if text_modified or meta_modified:
143
extra_modified.append((newpath, file_id, kind,
144
text_modified, meta_modified))
146
def show_more_kind_changed(item):
147
(path, file_id, old_kind, new_kind) = item
148
to_file.write(' (%s => %s)' % (old_kind, new_kind))
150
def show_path(path, file_id, kind, meta_modified,
151
default_format, with_file_id_format):
152
dec_path = decorate_path(path, kind, meta_modified)
154
to_file.write(with_file_id_format % dec_path)
156
to_file.write(default_format % dec_path)
158
def show_list(files, long_status_name, short_status_letter,
159
default_format='%s', with_file_id_format='%-30s',
164
prefix = short_status_letter
167
prefix = indent + prefix + ' '
170
path, file_id, kind = item[:3]
171
if (filter is not None and not filter(path, file_id)):
173
if not header_shown and not short_status:
174
to_file.write(indent + long_status_name + ':\n')
178
meta_modified = item[4]
180
to_file.write(prefix)
181
show_path(path, file_id, kind, meta_modified,
182
default_format, with_file_id_format)
183
if show_more is not None:
186
to_file.write(' %s' % file_id)
189
show_list(self.removed, 'removed', 'D')#
190
show_list(self.added, 'added', 'A')
192
# Reorder self.renamed tuples so that all lists share the same
193
# order for their 3 first fields and that they also begin like
194
# the self.modified tuples
195
renamed = [(p, i, k, tm, mm, np)
196
for p, np, i, k, tm, mm in self.renamed]
197
show_list(renamed, 'renamed', 'R', with_file_id_format='%s',
198
show_more=show_more_renamed)
199
show_list(self.kind_changed, 'kind changed', 'K',
200
with_file_id_format='%s',
201
show_more=show_more_kind_changed)
202
show_list(self.modified + extra_modified, 'modified', 'M')
204
show_list(self.unchanged, 'unchanged', 'S')
206
show_list(self.unversioned, 'unknown', ' ')
107
208
def get_changes_as_text(self, show_ids=False, show_unchanged=False,
110
211
output = StringIO.StringIO()
111
report_delta(output, self, short_status, show_ids, show_unchanged)
212
self.show(output, show_ids, show_unchanged, short_status)
112
213
return output.getvalue()
332
434
versioned_change = versioned_change_map[versioned]
333
435
reporter.report(file_id, path, versioned_change, renamed, modified,
334
436
exe_change, kind)
336
def report_delta(to_file, delta, short_status=False, show_ids=False,
337
show_unchanged=False, indent='', filter=None):
338
"""Output this delta in status-like form to to_file.
340
:param to_file: A file-like object where the output is displayed.
342
:param delta: A TreeDelta containing the changes to be displayed
344
:param short_status: Single-line status if True.
346
:param show_ids: Output the file ids if True.
348
:param show_unchanged: Output the unchanged files if True.
350
:param indent: Added at the beginning of all output lines (for merged
353
:param filter: A callable receiving a path and a file id and
354
returning True if the path should be displayed.
357
def decorate_path(path, kind, meta_modified=None):
358
if kind == 'directory':
360
elif kind == 'symlink':
366
def show_more_renamed(item):
367
(oldpath, file_id, kind,
368
text_modified, meta_modified, newpath) = item
369
dec_new_path = decorate_path(newpath, kind, meta_modified)
370
to_file.write(' => %s' % dec_new_path)
371
if text_modified or meta_modified:
372
extra_modified.append((newpath, file_id, kind,
373
text_modified, meta_modified))
375
def show_more_kind_changed(item):
376
(path, file_id, old_kind, new_kind) = item
377
to_file.write(' (%s => %s)' % (old_kind, new_kind))
379
def show_path(path, file_id, kind, meta_modified,
380
default_format, with_file_id_format):
381
dec_path = decorate_path(path, kind, meta_modified)
383
to_file.write(with_file_id_format % dec_path)
385
to_file.write(default_format % dec_path)
387
def show_list(files, long_status_name, short_status_letter,
388
default_format='%s', with_file_id_format='%-30s',
393
prefix = short_status_letter
396
prefix = indent + prefix + ' '
399
path, file_id, kind = item[:3]
400
if (filter is not None and not filter(path, file_id)):
402
if not header_shown and not short_status:
403
to_file.write(indent + long_status_name + ':\n')
407
meta_modified = item[4]
409
to_file.write(prefix)
410
show_path(path, file_id, kind, meta_modified,
411
default_format, with_file_id_format)
412
if show_more is not None:
415
to_file.write(' %s' % file_id)
418
show_list(delta.removed, 'removed', 'D')
419
show_list(delta.added, 'added', 'A')
421
# Reorder delta.renamed tuples so that all lists share the same
422
# order for their 3 first fields and that they also begin like
423
# the delta.modified tuples
424
renamed = [(p, i, k, tm, mm, np)
425
for p, np, i, k, tm, mm in delta.renamed]
426
show_list(renamed, 'renamed', 'R', with_file_id_format='%s',
427
show_more=show_more_renamed)
428
show_list(delta.kind_changed, 'kind changed', 'K',
429
with_file_id_format='%s',
430
show_more=show_more_kind_changed)
431
show_list(delta.modified + extra_modified, 'modified', 'M')
433
show_list(delta.unchanged, 'unchanged', 'S')
435
show_list(delta.unversioned, 'unknown', ' ')