~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/delta.py

  • Committer: Jelmer Vernooij
  • Date: 2011-12-16 16:40:10 UTC
  • mto: This revision was merged to the branch mainline in revision 6391.
  • Revision ID: jelmer@samba.org-20111216164010-z3hy00xrnclnkf7a
Update tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
61
61
        self.modified = []
62
62
        self.unchanged = []
63
63
        self.unversioned = []
 
64
        self.missing = []
64
65
 
65
66
    def __eq__(self, other):
66
67
        if not isinstance(other, TreeDelta):
137
138
            else:
138
139
                delta.removed.append((path[0], file_id, kind[0]))
139
140
        elif fully_present[0] is False:
140
 
            continue
 
141
            delta.missing.append((path[1], file_id, kind[1]))
141
142
        elif name[0] != name[1] or parent_id[0] != parent_id[1]:
142
143
            # If the name changes, or the parent_id changes, we have a rename
143
144
            # (if we move a parent, that doesn't count as a rename for the
160
161
    delta.removed.sort()
161
162
    delta.added.sort()
162
163
    delta.renamed.sort()
 
164
    delta.missing.sort()
163
165
    # TODO: jam 20060529 These lists shouldn't need to be sorted
164
166
    #       since we added them in alphabetical order.
165
167
    delta.modified.sort()
172
174
    """Report changes between two trees"""
173
175
 
174
176
    def __init__(self, output=None, suppress_root_add=True,
175
 
                 output_file=None, unversioned_filter=None, view_info=None):
 
177
                 output_file=None, unversioned_filter=None, view_info=None,
 
178
                 classify=True):
176
179
        """Constructor
177
180
 
178
181
        :param output: a function with the signature of trace.note, i.e.
187
190
        :param view_info: A tuple of view_name,view_files if only
188
191
            items inside a view are to be reported on, or None for
189
192
            no view filtering.
 
193
        :param classify: Add special symbols to indicate file kind.
190
194
        """
191
195
        if output_file is not None:
192
196
            if output is not None:
202
206
                             'unchanged': ' ',
203
207
                             'created': 'N',
204
208
                             'modified': 'M',
205
 
                             'deleted': 'D'}
 
209
                             'deleted': 'D',
 
210
                             'missing': '!',
 
211
                             }
206
212
        self.versioned_map = {'added': '+', # versioned target
207
213
                              'unchanged': ' ', # versioned in both
208
214
                              'removed': '-', # versioned in source
209
215
                              'unversioned': '?', # versioned in neither
210
216
                              }
211
217
        self.unversioned_filter = unversioned_filter
 
218
        if classify:
 
219
            self.kind_marker = osutils.kind_marker
 
220
        else:
 
221
            self.kind_marker = lambda kind: ''
212
222
        if view_info is None:
213
223
            self.view_name = None
214
224
            self.view_files = []
263
273
            # if the file is not missing in the source, we show its kind
264
274
            # when we show two paths.
265
275
            if kind[0] is not None:
266
 
                old_path += osutils.kind_marker(kind[0])
 
276
                old_path += self.kind_marker(kind[0])
267
277
            old_path += " => "
268
278
        elif versioned == 'removed':
269
279
            # not present in target
278
288
            rename = self.versioned_map[versioned]
279
289
        # we show the old kind on the new path when the content is deleted.
280
290
        if modified == 'deleted':
281
 
            path += osutils.kind_marker(kind[0])
 
291
            path += self.kind_marker(kind[0])
282
292
        # otherwise we always show the current kind when there is one
283
293
        elif kind[1] is not None:
284
 
            path += osutils.kind_marker(kind[1])
 
294
            path += self.kind_marker(kind[1])
285
295
        if exe_change:
286
296
            exe = '*'
287
297
        else:
325
335
        else:
326
336
            if content_change:
327
337
                modified = "modified"
 
338
            elif kind[0] is None:
 
339
                modified = "missing"
328
340
            else:
329
341
                modified = "unchanged"
330
342
            if kind[1] == "file":
334
346
                        exe_change, kind)
335
347
 
336
348
def report_delta(to_file, delta, short_status=False, show_ids=False, 
337
 
         show_unchanged=False, indent='', filter=None):
 
349
         show_unchanged=False, indent='', filter=None, classify=True):
338
350
    """Output this delta in status-like form to to_file.
339
351
 
340
352
    :param to_file: A file-like object where the output is displayed.
352
364
 
353
365
    :param filter: A callable receiving a path and a file id and
354
366
        returning True if the path should be displayed.
 
367
 
 
368
    :param classify: Add special symbols to indicate file kind.
355
369
    """
356
370
 
357
371
    def decorate_path(path, kind, meta_modified=None):
 
372
        if not classify:
 
373
            return path
358
374
        if kind == 'directory':
359
375
            path += '/'
360
376
        elif kind == 'symlink':
417
433
 
418
434
    show_list(delta.removed, 'removed', 'D')
419
435
    show_list(delta.added, 'added', 'A')
 
436
    show_list(delta.missing, 'missing', '!')
420
437
    extra_modified = []
421
438
    # Reorder delta.renamed tuples so that all lists share the same
422
439
    # order for their 3 first fields and that they also begin like