Rev 3387: Stacked insert_record_stream. in http://people.ubuntu.com/~robertc/baz2.0/shallow-branch

Robert Collins robertc at robertcollins.net
Tue Jun 24 13:03:21 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/shallow-branch

------------------------------------------------------------
revno: 3387
revision-id: robertc at robertcollins.net-20080624120313-hyh4pr14fxzkpbs2
parent: robertc at robertcollins.net-20080623044500-szw4ohqv0lxy44yk
committer: Robert Collins <robertc at robertcollins.net>
branch nick: stacking-knits
timestamp: Tue 2008-06-24 22:03:13 +1000
message:
  Stacked insert_record_stream.
modified:
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2008-06-23 04:45:00 +0000
+++ b/bzrlib/knit.py	2008-06-24 12:03:13 +0000
@@ -1005,7 +1005,9 @@
                 bytes = record.get_bytes_as('fulltext')
                 lines = split_lines(record.get_bytes_as('fulltext'))
                 text_map[record.key] = lines
-                final_content[record.key] = PlainKnitContent(lines, record.key)
+                content_map[record.key] = PlainKnitContent(lines, record.key)
+                if record.key in keys:
+                    final_content[record.key] = content_map[record.key]
         for key in keys:
             if key in nonlocal_keys:
                 # already handled
@@ -1013,11 +1015,16 @@
             components = []
             cursor = key
             while cursor is not None:
-                record, record_details, digest, next = record_map[cursor]
+                try:
+                    record, record_details, digest, next = record_map[cursor]
+                except KeyError:
+                    raise RevisionNotPresent(cursor, self)
                 components.append((cursor, record, record_details, digest))
+                cursor = next
                 if cursor in content_map:
+                    # no need to plan further back
+                    components.append((cursor, None, None, None))
                     break
-                cursor = next
 
             content = None
             for (component_id, record, record_details,
@@ -1156,7 +1163,8 @@
                             chain.append(positions[chain[-1]][2])
                         except KeyError:
                             # missing basis component
-                            result = False
+                            needed_from_fallback.add(chain[-1])
+                            result = True
                             break
                 for chain_key in chain[:-1]:
                     checked_keys[chain_key] = result

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2008-06-23 04:45:00 +0000
+++ b/bzrlib/tests/test_knit.py	2008-06-24 12:03:13 +0000
@@ -1653,7 +1653,25 @@
             basis.calls)
 
     def test_insert_record_stream(self):
-        pass
+        # records are inserted as normal; insert_record_stream builds on
+        # add_lines, so a smoke test should be all thats needed:
+        key = ('foo',)
+        key_basis = ('bar',)
+        key_delta = ('zaphod',)
+        basis, test = self.get_basis_and_test_knit()
+        source = self.make_test_knit(name='source')
+        basis.add_lines(key_basis, (), ['foo\n'])
+        basis.calls = []
+        source.add_lines(key_basis, (), ['foo\n'])
+        source.add_lines(key_delta, (key_basis,), ['bar\n'])
+        stream = source.get_record_stream([key_delta], 'unordered', False)
+        test.insert_record_stream(stream)
+        self.assertEqual([("get_parent_map", set([key_basis]))],
+            basis.calls)
+        self.assertEqual({key_delta:(key_basis,)},
+            test.get_parent_map([key_delta]))
+        self.assertEqual('bar\n', test.get_record_stream([key_delta],
+            'unordered', True).next().get_bytes_as('fulltext'))
 
     def test_iter_lines_added_or_present_in_keys(self):
         # Lines from the basis are returned, and lines for a given key are only




More information about the bazaar-commits mailing list