Rev 3783: Move '_make_inv_delta' onto Inventory (UNTESTED). in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Fri Nov 14 04:38:44 GMT 2008


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 3783
revision-id: robertc at robertcollins.net-20081114043840-64gm1m0d9b2m7336
parent: robertc at robertcollins.net-20081114040641-3vfc7y1veq9qtblq
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Fri 2008-11-14 15:38:40 +1100
message:
  Move '_make_inv_delta' onto Inventory (UNTESTED).
modified:
  bzrlib/inventory.py            inventory.py-20050309040759-6648b84ca2005b37
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
=== modified file 'bzrlib/inventory.py'
--- a/bzrlib/inventory.py	2008-11-14 04:06:41 +0000
+++ b/bzrlib/inventory.py	2008-11-14 04:38:40 +0000
@@ -845,6 +845,24 @@
                         child_dirs.append((child_relpath+'/', child_ie))
             stack.extend(reversed(child_dirs))
 
+    def _make_delta(self, old):
+        """Make an inventory delta from two inventories."""
+        old_ids = set(old)
+        new_ids = set(self)
+        adds = new_ids - old_ids
+        deletes = old_ids - new_ids
+        common = old_ids.intersection(new_ids)
+        delta = []
+        for file_id in deletes:
+            delta.append((old.id2path(file_id), None, file_id, None))
+        for file_id in adds:
+            delta.append((None, self.id2path(file_id), file_id, self[file_id]))
+        for file_id in common:
+            if old[file_id] != self[file_id]:
+                delta.append((old.id2path(file_id), self.id2path(file_id),
+                    file_id, self[file_id]))
+        return delta
+
 
 class Inventory(CommonInventory):
     """Inventory of versioned files in a tree.
@@ -1619,6 +1637,27 @@
         """Return the number of entries in the inventory."""
         return len(self.id_to_entry)
 
+    def _make_delta(self, old):
+        """Make an inventory delta from two inventories."""
+        if type(old) != CHKInventory:
+            return CommonInventory._make_delta(self, old)
+        delta = []
+        for key, old_value, self_value in \
+            self.id_to_entry.iter_changes(old.id_to_entry):
+            file_id = key[0]
+            if old_value is not None:
+                old_path = old.id2path(file_id)
+            else:
+                old_path = None
+            if self_value is not None:
+                entry = self._bytes_to_entry(self_value)
+                new_path = self.id2path(file_id)
+            else:
+                entry = None
+                new_path = None
+            delta.append((old_path, new_path, file_id, entry))
+        return delta
+
     def path2id(self, name):
         """Walk down through directories to return entry of last component.
 

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2008-11-14 01:28:40 +0000
+++ b/bzrlib/repository.py	2008-11-14 04:38:40 +0000
@@ -2128,7 +2128,7 @@
             except KeyError:
                 repository.add_inventory(rev.revision_id, inv, present_parents)
             else:
-                delta = _make_inv_delta(basis_inv, inv)
+                delta = inv._make_delta(basis_inv)
                 repository.add_inventory_delta(rev.parent_ids[0], delta,
                     rev.revision_id, present_parents)
         else:
@@ -2140,25 +2140,6 @@
     repository.add_revision(rev.revision_id, rev, inv)
 
 
-def _make_inv_delta(old, new):
-    """Make an inventory delta from two inventories."""
-    old_ids = set(old)
-    new_ids = set(new)
-    adds = new_ids - old_ids
-    deletes = old_ids - new_ids
-    common = old_ids.intersection(new_ids)
-    delta = []
-    for file_id in deletes:
-        delta.append((old.id2path(file_id), None, file_id, None))
-    for file_id in adds:
-        delta.append((None, new.id2path(file_id), file_id, new[file_id]))
-    for file_id in common:
-        if old[file_id] != new[file_id]:
-            delta.append((old.id2path(file_id), new.id2path(file_id),
-                file_id, new[file_id]))
-    return delta
-
-
 class MetaDirRepository(Repository):
     """Repositories in the new meta-dir layout.
     
@@ -3271,8 +3252,7 @@
                     pending_revisions = []
                     for tree in self.source.revision_trees(batch):
                         current_revision_id = tree.get_revision_id()
-                        delta = _make_inv_delta(basis_tree.inventory,
-                            tree.inventory)
+                        delta = tree.inventory._make_delta(basis_tree.inventory)
                         for old_path, new_path, file_id, entry in delta:
                             if new_path is not None:
                                 if not (new_path or self.target.supports_rich_root()):




More information about the bazaar-commits mailing list