Rev 2617: Support the restrict_revisions parameter to join on delta knits. in file:///data/jelmer/bzr/shallow/

Jelmer Vernooij jelmer at samba.org
Sat Jul 14 10:20:35 BST 2007


At file:///data/jelmer/bzr/shallow/

------------------------------------------------------------
revno: 2617
revision-id: jelmer at samba.org-20070714092014-4max0g1y6yd7eb5e
parent: jelmer at samba.org-20070714083247-wael1kydpl431tyc
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: shallow
timestamp: Sat 2007-07-14 12:20:14 +0300
message:
  Support the restrict_revisions parameter to join on delta knits.
modified:
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/tests/interversionedfile_implementations/test_join.py test_join.py-20060302012326-9b5e9b0f0a03fedc
  bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2007-07-14 08:32:47 +0000
+++ b/bzrlib/knit.py	2007-07-14 09:20:14 +0000
@@ -1645,10 +1645,6 @@
         if not version_ids:
             return 0
 
-        if restrict_revisions and self.source.delta:
-            # Partial cloning from delta-knits is not supported yet
-            raise errors.PartialCloningNotSupported(self)
-
         pb = ui.ui_factory.nested_progress_bar()
         try:
             version_ids = list(version_ids)
@@ -1656,7 +1652,8 @@
                 version_ids.remove(None)
     
             if restrict_revisions:
-                self.source_ancestry = set(version_ids)
+                self.source_ancestry = set(
+                    self.source._get_components_positions(version_ids).keys())
             else:
                 self.source_ancestry = set(self.source.get_ancestry(version_ids))
             this_versions = set(self.target._index.get_versions())

=== modified file 'bzrlib/tests/interversionedfile_implementations/test_join.py'
--- a/bzrlib/tests/interversionedfile_implementations/test_join.py	2007-07-13 17:14:44 +0000
+++ b/bzrlib/tests/interversionedfile_implementations/test_join.py	2007-07-14 09:20:14 +0000
@@ -74,8 +74,8 @@
         except errors.PartialCloningNotSupported:
             return # Not all VersionedFile implementations support 
                    # restrict_revisions
-        self.assertEquals(["r1", "r3"], 
-            f2.versions())
+        self.assertTrue("r1" in f2.versions())
+        self.assertTrue("r3" in f2.versions())
 
     def test_gets_expected_inter_worker(self):
         source = self.get_source()

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2007-07-13 17:14:44 +0000
+++ b/bzrlib/tests/test_knit.py	2007-07-14 09:20:14 +0000
@@ -885,20 +885,27 @@
         self.assertTrue(k2.has_version('text-c'))
 
     def test_knit_join_restrict_delta(self):
-        """Joining a knit with restrict_revisions set should error out on delta knits."""
+        """Joining with restrict_revisions set should never fetch more 
+        fulltexts and deltas than required to reconstruct the requested 
+        revisions."""
         k1 = KnitVersionedFile('test1', get_transport('.'), 
             factory=KnitPlainFactory(), create=True)
+        k1._max_delta_chain = 3
         k1.add_lines('text-a', [], split_lines(TEXT_1))
-        k1.add_lines('text-b', ['text-a'], split_lines(TEXT_1))
 
-        k1.add_lines('text-c', [], split_lines(TEXT_1))
+        k1.add_lines('text-c', ['text-a'], split_lines(TEXT_1))
         k1.add_lines('text-d', ['text-c'], split_lines(TEXT_1))
 
-        k1.add_lines('text-m', ['text-b', 'text-d'], split_lines(TEXT_1))
+        k1.add_lines('text-e', ['text-d'], split_lines(TEXT_2))
+        k1.add_lines('text-f', ['text-e'], split_lines(TEXT_1))
+
+        k1.add_lines('text-m', ['text-f', 'text-d'], split_lines(TEXT_1))
         k2 = KnitVersionedFile('test2', get_transport('.'), 
             factory=KnitPlainFactory(), create=True)
-        self.assertRaises(errors.PartialCloningNotSupported, 
-            k2.join, k1, version_ids=['text-m'], restrict_revisions=True)
+        k2.join(k1, version_ids=['text-m'], restrict_revisions=True)
+        self.assertEquals(['text-e', 'text-f', 'text-m'],
+                          k2.versions())
+        self.assertEquals(TEXT_1, k2.get_text('text-m'))
 
     def test_knit_join_restrict(self):
         """Joining a knit with restrict_revisions set should not copy any 




More information about the bazaar-commits mailing list