1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# \subsection{Example usage}
#
# \textbf{XXX:} Move these to object serialization code.
def write_revision(writer, revision):
s = Stanza(revision=revision.revision_id,
committer=revision.committer,
timezone=long(revision.timezone),
timestamp=long(revision.timestamp),
inventory_sha1=revision.inventory_sha1,
message=revision.message)
for parent_id in revision.parent_ids:
s.add('parent', parent_id)
for prop_name, prop_value in revision.properties.items():
s.add(prop_name, prop_value)
writer.write_stanza(s)
def write_inventory(writer, inventory):
s = Stanza(inventory_version=7)
writer.write_stanza(s)
for path, ie in inventory.iter_entries():
s = Stanza()
s.add(ie.kind, ie.file_id)
for attr in ['name', 'parent_id', 'revision', \
'text_sha1', 'text_size', 'executable', \
'symlink_target', \
]:
attr_val = getattr(ie, attr, None)
if attr == 'executable' and attr_val == 0:
continue
if attr == 'parent_id' and attr_val == 'TREE_ROOT':
continue
if attr_val is not None:
s.add(attr, attr_val)
writer.write_stanza(s)
def read_inventory(inv_file):
"""Read inventory object from rio formatted inventory file"""
from bzrlib.inventory import Inventory, InventoryFile
s = read_stanza(inv_file)
assert s['inventory_version'] == 7
inv = Inventory()
for s in read_stanzas(inv_file):
kind, file_id = s.items[0]
parent_id = None
if 'parent_id' in s:
parent_id = s['parent_id']
if kind == 'file':
ie = InventoryFile(file_id, s['name'], parent_id)
ie.text_sha1 = s['text_sha1']
ie.text_size = s['text_size']
else:
raise NotImplementedError()
inv.add(ie)
return inv
|