Rev 4607: Support get_inventory_xml on CHKRepository. in http://bazaar.launchpad.net/~lifeless/bzr/CHKRepo._iter_inventory_xmls

Robert Collins robertc at robertcollins.net
Fri Aug 14 03:35:09 BST 2009


At http://bazaar.launchpad.net/~lifeless/bzr/CHKRepo._iter_inventory_xmls

------------------------------------------------------------
revno: 4607
revision-id: robertc at robertcollins.net-20090814023501-38rzzbe0ckolv7m8
parent: pqm at pqm.ubuntu.com-20090814002017-l0qxa8jj76sige97
committer: Robert Collins <robertc at robertcollins.net>
branch nick: CHKRepo._iter_inventory_xmls
timestamp: Fri 2009-08-14 12:35:01 +1000
message:
  Support get_inventory_xml on CHKRepository.
=== modified file 'bzrlib/repofmt/groupcompress_repo.py'
--- a/bzrlib/repofmt/groupcompress_repo.py	2009-08-12 18:58:05 +0000
+++ b/bzrlib/repofmt/groupcompress_repo.py	2009-08-14 02:35:01 +0000
@@ -795,9 +795,15 @@
             yield inventory.CHKInventory.deserialise(self.chk_bytes, texts[key], key)
 
     def _iter_inventory_xmls(self, revision_ids):
-        # Without a native 'xml' inventory, this method doesn't make sense, so
-        # make it raise to trap naughty direct users.
-        raise NotImplementedError(self._iter_inventory_xmls)
+        # Without a native 'xml' inventory, this method doesn't make sense.
+        # However older working trees, and older bundles want it - so we supply
+        # it allowing get_inventory_xml to work. Bundles currently use the
+        # serializer directly; this also isn't ideal, but there isn't an xml
+        # iteration interface offered at all for repositories. We could make
+        # _iter_inventory_xmls be part of the contract, even if kept private.
+        inv_to_str = self._serializer.write_inventory_to_string
+        for inv in self.iter_inventories(revision_ids):
+            yield inv_to_str(inv), inv.revision_id
 
     def _find_present_inventory_keys(self, revision_keys):
         parent_map = self.inventories.get_parent_map(revision_keys)

=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py	2009-08-04 04:36:34 +0000
+++ b/bzrlib/workingtree.py	2009-08-14 02:35:01 +0000
@@ -1893,8 +1893,8 @@
             firstline = xml.split('\n', 1)[0]
             if (not 'revision_id="' in firstline or
                 'format="7"' not in firstline):
-                inv = self.branch.repository.deserialise_inventory(
-                    new_revision, xml)
+                inv = self.branch.repository._serializer.read_inventory_from_string(
+                    xml, new_revision)
                 xml = self._create_basis_xml_from_inventory(new_revision, inv)
             self._write_basis_inventory(xml)
         except (errors.NoSuchRevision, errors.RevisionNotPresent):




More information about the bazaar-commits mailing list