Rev 5093: implement removing a node. 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:50:49 GMT 2010


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

------------------------------------------------------------
revno: 5093
revision-id: john at arbash-meinel.com-20100305225015-d70rj7czf6zgagky
parent: john at arbash-meinel.com-20100305224600-cb6l8k3o7vx9e80c
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.2.0b2-contained-pack
timestamp: Fri 2010-03-05 16:50:15 -0600
message:
  implement removing a node.
-------------- next part --------------
=== modified file 'bzrlib/pack_collection.py'
--- a/bzrlib/pack_collection.py	2010-03-05 22:46:00 +0000
+++ b/bzrlib/pack_collection.py	2010-03-05 22:50:15 +0000
@@ -277,6 +277,15 @@
         self._ensure_loaded()
         return self._memos[name]
 
+    def remove_memo(self, name, value):
+        """Remove the given memo.
+
+        We require 'value' so that we can ensure it matches.
+        """
+        old = self._memos.pop(name)
+        assert old == value
+        self._removed_info.add((name, value))
+
     def save(self):
         """Save the current in-memory content to disk."""
         # TODO: Ensure disk locking
@@ -285,8 +294,8 @@
             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 = []
+        self._added_info = set()
+        self._removed_info = set()
 
 
 

=== modified file 'bzrlib/tests/test_pack_collection.py'
--- a/bzrlib/tests/test_pack_collection.py	2010-03-05 22:46:00 +0000
+++ b/bzrlib/tests/test_pack_collection.py	2010-03-05 22:50:15 +0000
@@ -177,3 +177,29 @@
     def test_get_missing_memo(self):
         tracker = TrivialMemoTracker(self.get_transport(), 'meta')
         self.assertRaises(KeyError, tracker.get_memo, 'not-there')
+
+    def test_remove_memo(self):
+        t = self.get_transport()
+        tracker = TrivialMemoTracker(t, 'meta')
+        tracker.add_memo('test-name', 'content')
+        tracker.add_memo('test-name2', 'content2')
+        self.assertEqual({'test-name': 'content',
+                          'test-name2': 'content2'}, tracker._memos)
+        self.assertEqual([('test-name', 'content'),
+                          ('test-name2', 'content2'),
+                         ], sorted(tracker._added_info))
+        self.assertEqual([], sorted(tracker._removed_info))
+        tracker.save()
+        self.assertEqual([], sorted(tracker._added_info))
+        self.assertEqual([], sorted(tracker._removed_info))
+        tracker.remove_memo('test-name2', 'content2')
+        self.assertEqual([], sorted(tracker._added_info))
+        self.assertEqual([('test-name2', 'content2')],
+                         sorted(tracker._removed_info))
+        self.assertEqual({'test-name': 'content'}, tracker._memos)
+        # Before saving, we should have both keys
+        btree = tracker._index_class(t, 'meta', size=None)
+        self.assertEqual(2, btree.key_count())
+        tracker.save()
+        btree = tracker._index_class(t, 'meta', size=None)
+        self.assertEqual(1, btree.key_count())



More information about the bazaar-commits mailing list