Rev 3381: Vf.keys() stacking support. in http://people.ubuntu.com/~robertc/baz2.0/shallow-branch

Robert Collins robertc at robertcollins.net
Thu Jun 19 14:27:48 BST 2008


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

------------------------------------------------------------
revno: 3381
revision-id: robertc at robertcollins.net-20080619132744-zsz5c5cpv6sovwoy
parent: robertc at robertcollins.net-20080619131424-gbltev5ud5u82gbt
committer: Robert Collins <robertc at robertcollins.net>
branch nick: stacking-knits
timestamp: Thu 2008-06-19 23:27:44 +1000
message:
  Vf.keys() stacking support.
modified:
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
  bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2008-06-19 13:14:24 +0000
+++ b/bzrlib/knit.py	2008-06-19 13:27:44 +0000
@@ -1527,7 +1527,12 @@
         """See VersionedFiles.keys."""
         if 'evil' in debug.debug_flags:
             trace.mutter_callsite(2, "keys scales with size of history")
-        return self._index.keys()
+        sources = [self._index] + self._fallback_vfs
+        result = set()
+        for source in sources:
+            result.update(source.keys())
+        return result
+
 
 
 class _KndxIndex(object):

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2008-06-19 13:14:24 +0000
+++ b/bzrlib/tests/test_knit.py	2008-06-19 13:27:44 +0000
@@ -1456,7 +1456,27 @@
         pass
 
     def test_keys(self):
-        pass
+        key1 = ('foo1',)
+        key2 = ('foo2',)
+        # all sources are asked for keys:
+        basis, test = self.get_basis_and_test_knit()
+        keys = test.keys()
+        self.assertEqual(set(), set(keys))
+        self.assertEqual([("keys",)], basis.calls)
+        # keys from a basis are returned:
+        basis.add_lines(key1, (), [])
+        basis.calls = []
+        keys = test.keys()
+        self.assertEqual(set([key1]), set(keys))
+        self.assertEqual([("keys",)], basis.calls)
+        # keys in both are not duplicated:
+        test.add_lines(key2, (), [])
+        basis.add_lines(key2, (), [])
+        basis.calls = []
+        keys = test.keys()
+        self.assertEqual(2, len(keys))
+        self.assertEqual(set([key1, key2]), set(keys))
+        self.assertEqual([("keys",)], basis.calls)
 
     def test_add_mpdiffs(self):
         pass

=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py	2008-06-19 13:14:24 +0000
+++ b/bzrlib/versionedfile.py	2008-06-19 13:27:44 +0000
@@ -549,6 +549,10 @@
         self.calls.append(("get_sha1s", copy(keys)))
         return self._backing_vf.get_sha1s(keys)
 
+    def keys(self):
+        self.calls.append(("keys",))
+        return self._backing_vf.keys()
+
 
 class KeyMapper(object):
     """KeyMappers map between keys and underlying paritioned storage."""




More information about the bazaar-commits mailing list