/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/bundle/serializer/__init__.py

  • Committer: Jelmer Vernooij
  • Date: 2018-06-29 20:24:31 UTC
  • mfrom: (6999 work)
  • mto: This revision was merged to the branch mainline in revision 7008.
  • Revision ID: jelmer@jelmer.uk-20180629202431-2td8kihrsthzuvau
merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
from ... import (
26
26
    errors,
27
 
    pyutils,
 
27
    registry,
28
28
    )
29
29
from ...diff import internal_diff
30
30
from ...revision import NULL_REVISION
43
43
    br'^# Bazaar-NG changeset v(?P<version>\d+[\w.]*)(?P<lineending>\r?)\n$')
44
44
 
45
45
 
46
 
_serializers = {}
 
46
serializer_registry = registry.Registry()
47
47
 
48
 
v4_string = '4'
49
48
 
50
49
def _get_bundle_header(version):
51
 
    return '%s%s\n' % (BUNDLE_HEADER, version)
 
50
    return b''.join([BUNDLE_HEADER, version, b'\n'])
52
51
 
53
52
def _get_filename(f):
54
53
    return getattr(f, 'name', '<unknown>')
80
79
    if version is None:
81
80
        raise errors.NotABundle('Did not find an opening header')
82
81
 
83
 
    # Now we have a version, to figure out how to read the bundle
84
 
    if version not in _serializers:
85
 
        raise errors.BundleNotSupported(version,
86
 
            'version not listed in known versions')
87
 
 
88
 
    serializer = _serializers[version](version)
89
 
 
90
 
    return serializer.read(f)
 
82
    return get_serializer(version).read(f)
91
83
 
92
84
 
93
85
def get_serializer(version):
94
86
    try:
95
 
        return _serializers[version](version)
 
87
        serializer = serializer_registry.get(version)
96
88
    except KeyError:
97
 
        raise errors.BundleNotSupported(version, 'unknown bundle format')
 
89
        raise errors.BundleNotSupported(version,
 
90
            'unknown bundle format')
 
91
 
 
92
    return serializer(version)
98
93
 
99
94
 
100
95
def write(source, revision_ids, f, version=None, forced_bases={}):
167
162
        return revision_ids
168
163
 
169
164
 
170
 
def register(version, klass, overwrite=False):
171
 
    """Register a BundleSerializer version.
172
 
 
173
 
    :param version: The version associated with this format
174
 
    :param klass: The class to instantiate, which must take a version argument
175
 
    """
176
 
    global _serializers
177
 
    if overwrite:
178
 
        _serializers[version] = klass
179
 
        return
180
 
 
181
 
    if version not in _serializers:
182
 
        _serializers[version] = klass
183
 
 
184
 
 
185
 
def register_lazy(version, module, classname, overwrite=False):
186
 
    """Register lazy-loaded bundle serializer.
187
 
 
188
 
    :param version: The version associated with this reader
189
 
    :param module: String indicating what module should be loaded
190
 
    :param classname: Name of the class that will be instantiated
191
 
    :param overwrite: Should this version override a default
192
 
    """
193
 
    def _loader(version):
194
 
        klass = pyutils.get_named_object(module, classname)
195
 
        return klass(version)
196
 
    register(version, _loader, overwrite=overwrite)
197
 
 
198
 
 
199
165
def binary_diff(old_filename, old_lines, new_filename, new_lines, to_file):
200
166
    temp = BytesIO()
201
167
    internal_diff(old_filename, old_lines, new_filename, new_lines, temp,
204
170
    base64.encode(temp, to_file)
205
171
    to_file.write('\n')
206
172
 
207
 
register_lazy('0.8', 'breezy.bundle.serializer.v08', 'BundleSerializerV08')
208
 
register_lazy('0.9', 'breezy.bundle.serializer.v09', 'BundleSerializerV09')
209
 
register_lazy(v4_string, 'breezy.bundle.serializer.v4',
 
173
serializer_registry.register_lazy('0.8', 'breezy.bundle.serializer.v08', 'BundleSerializerV08')
 
174
serializer_registry.register_lazy('0.9', 'breezy.bundle.serializer.v09', 'BundleSerializerV09')
 
175
serializer_registry.register_lazy('4', 'breezy.bundle.serializer.v4',
210
176
              'BundleSerializerV4')
211
 
register_lazy(None, 'breezy.bundle.serializer.v4', 'BundleSerializerV4')
212
 
 
 
177
serializer_registry.default_key = '4'