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