/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

Merge python3-h.

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
50
    return b''.join([BUNDLE_HEADER, version.encode('ascii'), b'\n'])
80
79
    if version is None:
81
80
        raise errors.NotABundle('Did not find an opening header')
82
81
 
83
 
    version = version.decode('ascii')
84
 
 
85
 
    # Now we have a version, to figure out how to read the bundle
86
 
    if version not in _serializers:
87
 
        raise errors.BundleNotSupported(version,
88
 
            'version not listed in known versions')
89
 
 
90
 
    serializer = _serializers[version](version)
91
 
 
92
 
    return serializer.read(f)
 
82
    return get_serializer(version.decode('ascii')).read(f)
93
83
 
94
84
 
95
85
def get_serializer(version):
96
86
    try:
97
 
        return _serializers[version](version)
 
87
        serializer = serializer_registry.get(version)
98
88
    except KeyError:
99
 
        raise errors.BundleNotSupported(version, 'unknown bundle format')
 
89
        raise errors.BundleNotSupported(version,
 
90
            'unknown bundle format')
 
91
 
 
92
    return serializer(version)
100
93
 
101
94
 
102
95
def write(source, revision_ids, f, version=None, forced_bases={}):
169
162
        return revision_ids
170
163
 
171
164
 
172
 
def register(version, klass, overwrite=False):
173
 
    """Register a BundleSerializer version.
174
 
 
175
 
    :param version: The version associated with this format
176
 
    :param klass: The class to instantiate, which must take a version argument
177
 
    """
178
 
    global _serializers
179
 
    if overwrite:
180
 
        _serializers[version] = klass
181
 
        return
182
 
 
183
 
    if version not in _serializers:
184
 
        _serializers[version] = klass
185
 
 
186
 
 
187
 
def register_lazy(version, module, classname, overwrite=False):
188
 
    """Register lazy-loaded bundle serializer.
189
 
 
190
 
    :param version: The version associated with this reader
191
 
    :param module: String indicating what module should be loaded
192
 
    :param classname: Name of the class that will be instantiated
193
 
    :param overwrite: Should this version override a default
194
 
    """
195
 
    def _loader(version):
196
 
        klass = pyutils.get_named_object(module, classname)
197
 
        return klass(version)
198
 
    register(version, _loader, overwrite=overwrite)
199
 
 
200
 
 
201
165
def binary_diff(old_filename, old_lines, new_filename, new_lines, to_file):
202
166
    temp = BytesIO()
203
167
    internal_diff(old_filename, old_lines, new_filename, new_lines, temp,
206
170
    base64.encode(temp, to_file)
207
171
    to_file.write('\n')
208
172
 
209
 
register_lazy('0.8', 'breezy.bundle.serializer.v08', 'BundleSerializerV08')
210
 
register_lazy('0.9', 'breezy.bundle.serializer.v09', 'BundleSerializerV09')
211
 
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',
212
176
              'BundleSerializerV4')
213
 
register_lazy(None, 'breezy.bundle.serializer.v4', 'BundleSerializerV4')
214
 
 
 
177
serializer_registry.default_key = '4'