Rev 5092: A few more bits, we can add and save content. in http://bzr.arbash-meinel.com/branches/bzr/lp/2.2.0b2-contained-pack

John Arbash Meinel john at arbash-meinel.com
Fri Mar 5 22:46:34 GMT 2010


At http://bzr.arbash-meinel.com/branches/bzr/lp/2.2.0b2-contained-pack

------------------------------------------------------------
revno: 5092
revision-id: john at arbash-meinel.com-20100305224600-cb6l8k3o7vx9e80c
parent: john at arbash-meinel.com-20100305223556-e8r1sbrcrx97za52
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.2.0b2-contained-pack
timestamp: Fri 2010-03-05 16:46:00 -0600
message:
  A few more bits, we can add and save content.
-------------- next part --------------
=== modified file 'bzrlib/pack_collection.py'
--- a/bzrlib/pack_collection.py	2010-03-05 22:35:56 +0000
+++ b/bzrlib/pack_collection.py	2010-03-05 22:46:00 +0000
@@ -181,7 +181,8 @@
         self._memos = None
         # Names that have been added to this list, that have not yet been
         # written to disk.
-        self._added_names = set()
+        self._added_info = set()
+        self._removed_info = set()
 
     def _do_check_safe_to_cache(self):
         """Make sure that it is valid to cache state in memory.
@@ -254,17 +255,38 @@
             return []
         return index.iter_all_entries()
 
+    def _diff_memos_from_disk(self):
+        """Compare the current memos in memory versus the ones on disk.
+
+        Prepare for updating the file on disk.
+        """
+        disk_nodes = set()
+        for _, key, value in self._iter_disk_index():
+            name = key[0]
+            disk_nodes.add((name, value))
+
+    def add_memo(self, name, value):
+        """Add a memo to this cache."""
+        self._ensure_loaded()
+        assert name not in self._memos
+        self._memos[name] = value
+        self._added_info.add((name, value))
+
     def get_memo(self, name):
         """Get the section (index) memo for the given name."""
+        self._ensure_loaded()
+        return self._memos[name]
 
     def save(self):
         """Save the current in-memory content to disk."""
         # TODO: Ensure disk locking
         builder = self._index_builder_class(reference_lists=0, key_elements=1)
-        for name, value in self._memos:
+        for name, value in self._memos.iteritems():
             builder.add_node((name,), value)
         self.transport.put_file(self.filename, builder.finish(),
                                 mode=self._do_get_file_mode())
+        self._added_info = []
+        self._removed_info = []
 
 
 

=== modified file 'bzrlib/tests/test_pack_collection.py'
--- a/bzrlib/tests/test_pack_collection.py	2010-03-05 22:35:56 +0000
+++ b/bzrlib/tests/test_pack_collection.py	2010-03-05 22:46:00 +0000
@@ -152,3 +152,28 @@
         tracker.save()
         btree = tracker._index_class(t, 'meta', size=None)
         self.assertEqual(0, btree.key_count())
+
+    def test_add_memo(self):
+        t = self.get_transport()
+        tracker = TrivialMemoTracker(t, 'meta')
+        tracker.add_memo('test-name', 'content')
+        self.assertEqual('content', tracker.get_memo('test-name'))
+        self.assertEqual({'test-name': 'content'}, tracker._memos)
+        self.assertEqual([('test-name', 'content')],
+                         sorted(tracker._added_info))
+        self.assertEqual([], sorted(tracker._removed_info))
+        tracker.save()
+        self.assertEqual({'test-name': 'content'}, tracker._memos)
+        self.assertEqual([], sorted(tracker._added_info))
+        self.assertEqual([], sorted(tracker._removed_info))
+        btree = tracker._index_class(t, 'meta', size=None)
+        self.assertEqual(1, btree.key_count())
+        self.assertEqual([(('test-name',), 'content')],
+                 sorted([(n[1], n[2]) for n in btree.iter_all_entries()]))
+
+    def test__diff_memos_from_disk(self):
+        tracker = TrivialMemoTracker(self.get_transport(), 'meta')
+
+    def test_get_missing_memo(self):
+        tracker = TrivialMemoTracker(self.get_transport(), 'meta')
+        self.assertRaises(KeyError, tracker.get_memo, 'not-there')



More information about the bazaar-commits mailing list