~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: Ian Clatworthy
  • Date: 2008-12-23 07:47:43 UTC
  • mfrom: (3916 +trunk)
  • mto: (3586.1.28 views-ui)
  • mto: This revision was merged to the branch mainline in revision 4030.
  • Revision ID: ian.clatworthy@canonical.com-20081223074743-t942gwabt937o693
merge bzr.dev r3916

Show diffs side-by-side

added added

removed removed

Lines of Context:
341
341
                   self.revision))
342
342
 
343
343
    def __eq__(self, other):
 
344
        if other is self:
 
345
            # For the case when objects are cached
 
346
            return True
344
347
        if not isinstance(other, InventoryEntry):
345
348
            return NotImplemented
346
349
 
1235
1238
 
1236
1239
    def _make_delta(self, old):
1237
1240
        """Make an inventory delta from two inventories."""
1238
 
        old_ids = set(old)
1239
 
        new_ids = set(self)
 
1241
        old_getter = getattr(old, '_byid', old)
 
1242
        new_getter = self._byid
 
1243
        old_ids = set(old_getter)
 
1244
        new_ids = set(new_getter)
1240
1245
        adds = new_ids - old_ids
1241
1246
        deletes = old_ids - new_ids
1242
 
        common = old_ids.intersection(new_ids)
 
1247
        if not adds and not deletes:
 
1248
            common = new_ids
 
1249
        else:
 
1250
            common = old_ids.intersection(new_ids)
1243
1251
        delta = []
1244
1252
        for file_id in deletes:
1245
1253
            delta.append((old.id2path(file_id), None, file_id, None))
1246
1254
        for file_id in adds:
1247
1255
            delta.append((None, self.id2path(file_id), file_id, self[file_id]))
1248
1256
        for file_id in common:
1249
 
            if old[file_id] != self[file_id]:
 
1257
            new_ie = new_getter[file_id]
 
1258
            old_ie = old_getter[file_id]
 
1259
            # If xml_serializer returns the cached InventoryEntries (rather
 
1260
            # than always doing .copy()), inlining the 'is' check saves 2.7M
 
1261
            # calls to __eq__.  Under lsprof this saves 20s => 6s.
 
1262
            # It is a minor improvement without lsprof.
 
1263
            if old_ie is new_ie or old_ie == new_ie:
 
1264
                continue
 
1265
            else:
1250
1266
                delta.append((old.id2path(file_id), self.id2path(file_id),
1251
 
                    file_id, self[file_id]))
 
1267
                              file_id, new_ie))
1252
1268
        return delta
1253
1269
 
1254
1270
    def remove_recursive_id(self, file_id):