Rev 3357: Create a registry of versioned file record adapters. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files
Robert Collins
robertc at robertcollins.net
Wed Apr 23 04:53:07 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/versioned_files
------------------------------------------------------------
revno: 3357
revision-id: robertc at robertcollins.net-20080423035302-8dpsshc599ws75qu
parent: robertc at robertcollins.net-20080423025955-5a3v5l4blb55c15d
committer: Robert Collins <robertc at robertcollins.net>
branch nick: data_stream_revamp
timestamp: Wed 2008-04-23 13:53:02 +1000
message:
Create a registry of versioned file record adapters.
modified:
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2008-04-23 02:44:36 +0000
+++ b/bzrlib/knit.py 2008-04-23 03:53:02 +0000
@@ -145,10 +145,16 @@
class KnitAdapter(object):
"""Base class for knit record adaption."""
- def __init__(self):
+ def __init__(self, basis_vf):
+ """Create an adapter which accesses full texts from basis_vf.
+
+ :param basis_vf: A versioned file to access basis texts of deltas from.
+ May be None for adapters that do not need to access basis texts.
+ """
self._data = _KnitData(None)
self._annotate_factory = KnitAnnotateFactory()
self._plain_factory = KnitPlainFactory()
+ self._basis_vf = basis_vf
class FTAnnotatedToUnannotated(KnitAdapter):
@@ -189,14 +195,6 @@
class DeltaAnnotatedToFullText(KnitAdapter):
"""An adapter for deltas from annotated to unannotated."""
- def __init__(self, basis_vf):
- """Create an adapter which accesses full texts from basis_vf.
-
- :param basis_vf: A versioned file to access basis texts of deltas from.
- """
- KnitAdapter.__init__(self)
- self._basis_vf = basis_vf
-
def get_bytes(self, factory, annotated_compressed_bytes):
rec, contents = \
self._data._parse_record_unchecked(annotated_compressed_bytes)
@@ -226,14 +224,6 @@
class DeltaPlainToFullText(KnitAdapter):
"""An adapter for deltas from annotated to unannotated."""
- def __init__(self, basis_vf):
- """Create an adapter which accesses full texts from basis_vf.
-
- :param basis_vf: A versioned file to access basis texts of deltas from.
- """
- KnitAdapter.__init__(self)
- self._basis_vf = basis_vf
-
def get_bytes(self, factory, compressed_bytes):
rec, contents = \
self._data._parse_record_unchecked(compressed_bytes)
=== modified file 'bzrlib/tests/test_versionedfile.py'
--- a/bzrlib/tests/test_versionedfile.py 2008-04-23 02:59:55 +0000
+++ b/bzrlib/tests/test_versionedfile.py 2008-04-23 03:53:02 +0000
@@ -1365,8 +1365,26 @@
class TestContentFactoryAdaption(TestCaseWithMemoryTransport):
def test_select_adaptor(self):
- """Test that selecting an adaptor works."""
- # self.assertEqual(versionedfile.
+ """Test expected adapters exist."""
+ # One scenario for each lookup combination we expect to use.
+ # Each is source_kind, requested_kind, adapter class
+ scenarios = [
+ ('knit-delta-gz', 'fulltext', _mod_knit.DeltaPlainToFullText),
+ ('knit-ft-gz', 'fulltext', _mod_knit.FTPlainToFullText),
+ ('knit-annotated-delta-gz', 'knit-delta-gz',
+ _mod_knit.DeltaAnnotatedToUnannotated),
+ ('knit-annotated-delta-gz', 'fulltext',
+ _mod_knit.DeltaAnnotatedToFullText),
+ ('knit-annotated-ft-gz', 'knit-ft-gz',
+ _mod_knit.FTAnnotatedToUnannotated),
+ ('knit-annotated-ft-gz', 'fulltext',
+ _mod_knit.FTAnnotatedToFullText),
+ ]
+ for source, requested, klass in scenarios:
+ adapter_factory = versionedfile.adapter_registry.get(
+ (source, requested))
+ adapter = adapter_factory(None)
+ self.assertIsInstance(adapter, klass)
def get_knit(self, annotated=True):
if annotated:
@@ -1394,8 +1412,8 @@
# we need a full text, and a delta
f, parents = get_diamond_vf(self.get_knit(), trailing_eol=False)
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTAnnotatedToUnannotated(),
- _mod_knit.DeltaAnnotatedToUnannotated())
+ _mod_knit.FTAnnotatedToUnannotated(None),
+ _mod_knit.DeltaAnnotatedToUnannotated(None))
self.assertEqual(
'version origin 1 b284f94827db1fa2970d9e2014f080413b547a7e\n'
'origin\n'
@@ -1411,8 +1429,8 @@
# we need a full text, and a delta
f, parents = get_diamond_vf(self.get_knit())
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTAnnotatedToUnannotated(),
- _mod_knit.DeltaAnnotatedToUnannotated())
+ _mod_knit.FTAnnotatedToUnannotated(None),
+ _mod_knit.DeltaAnnotatedToUnannotated(None))
self.assertEqual(
'version origin 1 00e364d235126be43292ab09cb4686cf703ddc17\n'
'origin\n'
@@ -1431,7 +1449,7 @@
# must have the base lines requested from it.
logged_vf = versionedfile.RecordingVersionedFileDecorator(f)
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTAnnotatedToFullText(),
+ _mod_knit.FTAnnotatedToFullText(None),
_mod_knit.DeltaAnnotatedToFullText(logged_vf))
self.assertEqual('origin', ft_data)
self.assertEqual('base\nleft\nright\nmerged', delta_data)
@@ -1445,7 +1463,7 @@
# must have the base lines requested from it.
logged_vf = versionedfile.RecordingVersionedFileDecorator(f)
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTAnnotatedToFullText(),
+ _mod_knit.FTAnnotatedToFullText(None),
_mod_knit.DeltaAnnotatedToFullText(logged_vf))
self.assertEqual('origin\n', ft_data)
self.assertEqual('base\nleft\nright\nmerged\n', delta_data)
@@ -1462,7 +1480,7 @@
# must have the base lines requested from it.
logged_vf = versionedfile.RecordingVersionedFileDecorator(f)
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTPlainToFullText(),
+ _mod_knit.FTPlainToFullText(None),
_mod_knit.DeltaPlainToFullText(logged_vf))
self.assertEqual('origin\n', ft_data)
self.assertEqual('base\nleft\nright\nmerged\n', delta_data)
@@ -1480,7 +1498,7 @@
# must have the base lines requested from it.
logged_vf = versionedfile.RecordingVersionedFileDecorator(f)
ft_data, delta_data = self.helpGetBytes(f,
- _mod_knit.FTPlainToFullText(),
+ _mod_knit.FTPlainToFullText(None),
_mod_knit.DeltaPlainToFullText(logged_vf))
self.assertEqual('origin', ft_data)
self.assertEqual('base\nleft\nright\nmerged', delta_data)
=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py 2008-04-18 05:02:45 +0000
+++ b/bzrlib/versionedfile.py 2008-04-23 03:53:02 +0000
@@ -37,10 +37,26 @@
from cStringIO import StringIO
from bzrlib.inter import InterObject
+from bzrlib.registry import Registry
from bzrlib.symbol_versioning import *
from bzrlib.textmerge import TextMerge
+adapter_registry = Registry()
+adapter_registry.register_lazy(('knit-delta-gz', 'fulltext'), 'bzrlib.knit',
+ 'DeltaPlainToFullText')
+adapter_registry.register_lazy(('knit-ft-gz', 'fulltext'), 'bzrlib.knit',
+ 'FTPlainToFullText')
+adapter_registry.register_lazy(('knit-annotated-delta-gz', 'knit-delta-gz'),
+ 'bzrlib.knit', 'DeltaAnnotatedToUnannotated')
+adapter_registry.register_lazy(('knit-annotated-delta-gz', 'fulltext'),
+ 'bzrlib.knit', 'DeltaAnnotatedToFullText')
+adapter_registry.register_lazy(('knit-annotated-ft-gz', 'knit-ft-gz'),
+ 'bzrlib.knit', 'FTAnnotatedToUnannotated')
+adapter_registry.register_lazy(('knit-annotated-ft-gz', 'fulltext'),
+ 'bzrlib.knit', 'FTAnnotatedToFullText')
+
+
class ContentFactory(object):
"""Abstract interface for insertion and retrieval from a VersionedFile.
More information about the bazaar-commits
mailing list