Rev 3369: Eliminate the use of VersionedFile.join when fetching data. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files

Robert Collins robertc at robertcollins.net
Wed Apr 30 05:43:33 BST 2008


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

------------------------------------------------------------
revno: 3369
revision-id: robertc at robertcollins.net-20080430044326-v6gcokiz2j03dlqx
parent: robertc at robertcollins.net-20080430041351-14fg6mvv6581lsjb
committer: Robert Collins <robertc at robertcollins.net>
branch nick: data_stream_revamp
timestamp: Wed 2008-04-30 14:43:26 +1000
message:
  Eliminate the use of VersionedFile.join when fetching data.
modified:
  bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
  bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
=== modified file 'bzrlib/fetch.py'
--- a/bzrlib/fetch.py	2008-04-28 03:52:09 +0000
+++ b/bzrlib/fetch.py	2008-04-30 04:43:26 +0000
@@ -40,8 +40,7 @@
         )
 from bzrlib.trace import mutter
 import bzrlib.ui
-
-from bzrlib.lazy_import import lazy_import
+from bzrlib.versionedfile import filter_absent
 
 # TODO: Avoid repeatedly opening weaves so many times.
 
@@ -214,9 +213,9 @@
             self.to_repository.get_transaction())
         from_weave = self.from_weaves.get_weave(file_id,
             self.from_repository.get_transaction())
-        # we fetch all the texts, because texts do
-        # not reference anything, and its cheap enough
-        to_weave.join(from_weave, version_ids=required_versions)
+        # Fetch all the texts.
+        to_weave.insert_record_stream(from_weave.get_record_stream(required_versions,
+            'topological', False))
 
     def _fetch_inventory_weave(self, revs, pb):
         pb.update("fetch inventory", 0, 2)
@@ -232,8 +231,8 @@
             # know for unselected inventories whether all their required
             # texts are present in the other repository - it could be
             # corrupt.
-            to_weave.join(from_weave, pb=child_pb, msg='merge inventory',
-                          version_ids=revs)
+            to_weave.insert_record_stream(from_weave.get_record_stream(revs,
+                'topological', False))
         finally:
             child_pb.finished()
 
@@ -295,12 +294,15 @@
             to_transaction)
         from_sf = self.from_repository._revision_store.get_signature_file(
             from_transaction)
-        to_sf.join(from_sf, version_ids=revs, ignore_missing=True)
+        # A missing signature is just skipped.
+        to_sf.insert_record_stream(filter_absent(from_sf.get_record_stream(revs,
+            'unordered', False)))
         to_rf = self.to_repository._revision_store.get_revision_file(
             to_transaction)
         from_rf = self.from_repository._revision_store.get_revision_file(
             from_transaction)
-        to_rf.join(from_rf, version_ids=revs)
+        to_rf.insert_record_stream(from_rf.get_record_stream(revs,
+            'topological', False))
 
 
 class Inter1and2Helper(object):

=== modified file 'bzrlib/tests/interrepository_implementations/test_interrepository.py'
--- a/bzrlib/tests/interrepository_implementations/test_interrepository.py	2008-04-26 06:07:28 +0000
+++ b/bzrlib/tests/interrepository_implementations/test_interrepository.py	2008-04-30 04:43:26 +0000
@@ -184,8 +184,9 @@
         finally:
             to_repo.unlock()
 
-        # Implementations can either copy the missing basis text, or raise an
-        # exception
+        # Implementations can either ensure that the target of the delta is
+        # reconstructable, or raise an exception (which stream based copies
+        # generally do).
         try:
             to_repo.fetch(tree.branch.repository, 'rev-two')
         except errors.RevisionNotPresent, e:
@@ -194,12 +195,12 @@
             self.assertRaises((errors.NoSuchRevision, errors.RevisionNotPresent),
                               to_repo.revision_tree, 'rev-two')
         else:
-            # If not exception is raised, then the basis text should be
+            # If not exception is raised, then the text should be
             # available.
             to_repo.lock_read()
             try:
-                rt = to_repo.revision_tree('rev-one')
-                self.assertEqual('contents of tree/a\n',
+                rt = to_repo.revision_tree('rev-two')
+                self.assertEqual('new contents\n',
                                  rt.get_file_text('a-id'))
             finally:
                 to_repo.unlock()




More information about the bazaar-commits mailing list