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