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