summaryrefslogtreecommitdiff
path: root/tools/riodemo.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/riodemo.py')
-rw-r--r--tools/riodemo.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/riodemo.py b/tools/riodemo.py
new file mode 100644
index 0000000..3b97a57
--- /dev/null
+++ b/tools/riodemo.py
@@ -0,0 +1,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