1
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1
# Copyright (C) 2008 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
43
50
"""Simple revision serializer based around bencode.
46
squashes_xml_invalid_characters = False
48
53
# Maps {key:(Revision attribute, bencode_type, validator)}
49
54
# This tells us what kind we expect bdecode to create, what variable on
50
55
# Revision we should be using, and a function to call to validate/transform
129
134
return self.read_revision_from_string(f.read())
132
class CHKSerializer(xml8.Serializer_v8):
137
class CHKSerializerSubtree(BEncodeRevisionSerializer1, xml6.Serializer_v6):
138
"""A CHKInventory based serializer that supports tree references"""
140
supported_kinds = set(['file', 'directory', 'symlink', 'tree-reference'])
142
revision_format_num = None
143
support_altered_by_hack = False
145
def _unpack_entry(self, elt):
147
if not kind in self.supported_kinds:
148
raise AssertionError('unsupported entry kind %s' % kind)
149
if kind == 'tree-reference':
150
file_id = elt.attrib['file_id']
151
name = elt.attrib['name']
152
parent_id = elt.attrib['parent_id']
153
revision = elt.get('revision')
154
reference_revision = elt.get('reference_revision')
155
return inventory.TreeReference(file_id, name, parent_id, revision,
158
return xml6.Serializer_v6._unpack_entry(self, elt)
160
def __init__(self, node_size, search_key_name):
161
self.maximum_size = node_size
162
self.search_key_name = search_key_name
165
class CHKSerializer(xml5.Serializer_v5):
133
166
"""A CHKInventory based serializer with 'plain' behaviour."""