42
42
"""Convert InventoryEntry to XML element"""
43
43
e = Element('entry')
44
44
e.set('name', ie.name)
45
e.set('file_id', ie.file_id.decode('ascii'))
45
e.set('file_id', ie.file_id)
46
46
e.set('kind', ie.kind)
48
48
if ie.text_size is not None:
66
67
def _unpack_inventory(self, elt, revision_id=None, entry_cache=None,
67
68
return_from_cache=False):
68
69
"""Construct from XML Element
70
71
:param revision_id: Ignored parameter used by xml5.
72
root_id = elt.get('file_id')
73
root_id = (root_id.encode('ascii') if root_id else ROOT_ID)
73
root_id = elt.get('file_id') or ROOT_ID
74
74
inv = Inventory(root_id)
76
76
ie = self._unpack_entry(e, entry_cache=entry_cache,
83
84
def _unpack_entry(self, elt, entry_cache=None, return_from_cache=False):
84
# original format inventories don't have a parent_id for
85
# nodes in the root directory, but it's cleaner to use one
85
## original format inventories don't have a parent_id for
86
## nodes in the root directory, but it's cleaner to use one
87
88
parent_id = elt.get('parent_id')
88
parent_id = (parent_id.encode('ascii') if parent_id else ROOT_ID)
90
file_id = elt.get('file_id').encode('ascii')
91
92
kind = elt.get('kind')
92
93
if kind == 'directory':
93
ie = inventory.InventoryDirectory(file_id,
94
ie = inventory.InventoryDirectory(elt.get('file_id'),
96
97
elif kind == 'file':
97
ie = inventory.InventoryFile(file_id,
98
ie = inventory.InventoryFile(elt.get('file_id'),
100
101
ie.text_id = elt.get('text_id')
101
if ie.text_id is not None:
102
ie.text_id = ie.text_id.encode('utf-8')
103
102
ie.text_sha1 = elt.get('text_sha1')
104
if ie.text_sha1 is not None:
105
ie.text_sha1 = ie.text_sha1.encode('ascii')
106
103
v = elt.get('text_size')
107
104
ie.text_size = v and int(v)
108
105
elif kind == 'symlink':
109
ie = inventory.InventoryLink(file_id,
106
ie = inventory.InventoryLink(elt.get('file_id'),
112
109
ie.symlink_target = elt.get('symlink_target')
120
118
def _pack_revision(self, rev):
121
119
"""Revision object -> xml tree"""
122
120
root = Element('revision',
123
committer=rev.committer,
124
timestamp='%.9f' % rev.timestamp,
125
revision_id=rev.revision_id,
126
inventory_id=rev.inventory_id,
127
inventory_sha1=rev.inventory_sha1,
121
committer = rev.committer,
122
timestamp = '%.9f' % rev.timestamp,
123
revision_id = rev.revision_id,
124
inventory_id = rev.inventory_id,
125
inventory_sha1 = rev.inventory_sha1,
130
128
root.set('timezone', str(rev.timezone))
145
143
p.set('revision_sha1', rev.parent_sha1s[i])
148
def write_revision_to_string(self, rev):
149
return tostring(self._pack_revision(rev)) + b'\n'
151
def _write_element(self, elt, f):
152
ElementTree(elt).write(f, 'utf-8')
155
147
def _unpack_revision(self, elt):
156
148
"""XML Element -> Revision object"""
159
151
if elt.tag not in ('revision', 'changeset'):
160
152
raise BzrError("unexpected tag in revision file: %r" % elt)
162
rev = Revision(committer=elt.get('committer'),
163
timestamp=float(elt.get('timestamp')),
164
revision_id=elt.get('revision_id'),
165
inventory_id=elt.get('inventory_id'),
166
inventory_sha1=elt.get('inventory_sha1')
154
rev = Revision(committer = elt.get('committer'),
155
timestamp = float(elt.get('timestamp')),
156
revision_id = elt.get('revision_id'),
157
inventory_id = elt.get('inventory_id'),
158
inventory_sha1 = elt.get('inventory_sha1')
169
161
precursor = elt.get('precursor')