~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/delta.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-05-11 11:47:36 UTC
  • mfrom: (5200.3.8 lock_return)
  • Revision ID: pqm@pqm.ubuntu.com-20100511114736-mc1sq9zyo3vufec7
(lifeless) Provide a consistent interface to Tree, Branch,
 Repository where lock methods return an object with an unlock method to
 unlock the lock. This breaks the API for Branch,
 Repository on their lock_write methods. (Robert Collins)

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