Rev 3163: Support versioned or unversioned roots. in http://people.ubuntu.com/~robertc/baz2.0/inventory.journalled
Robert Collins
robertc at robertcollins.net
Thu Jan 3 21:26:08 GMT 2008
At http://people.ubuntu.com/~robertc/baz2.0/inventory.journalled
------------------------------------------------------------
revno: 3163
revision-id:robertc at robertcollins.net-20080103212603-u08eyfs5vn8po8yu
parent: robertc at robertcollins.net-20080103211123-g2hjn01pfk698gjj
committer: Robert Collins <robertc at robertcollins.net>
branch nick: inventory.journalled
timestamp: Fri 2008-01-04 08:26:03 +1100
message:
Support versioned or unversioned roots.
modified:
bzrlib/journalled_inventory.py journalled_inventory-20080103020931-0ht5n40kwc0p7fy1-1
bzrlib/tests/test_journalled_inv.py test_journalled_inv.-20080103012121-ny2w9slze5jgty8i-1
=== modified file 'bzrlib/journalled_inventory.py'
--- a/bzrlib/journalled_inventory.py 2008-01-03 20:30:16 +0000
+++ b/bzrlib/journalled_inventory.py 2008-01-03 21:26:03 +0000
@@ -79,6 +79,14 @@
FORMAT_1 = 'bzr journalled inventory v1 (bzr 1.1)'
+ def __init__(self, versioned_root):
+ """Create an InventoryJournal.
+
+ :param versioned_root: If True, any root entry that is seen is expected
+ to be versioned, and root entries can have any fileid.
+ """
+ self._versioned_root = versioned_root
+
def delta_to_lines(self, old_inventory_name, delta_to_new):
"""Return a line sequence for delta_to_new.
@@ -113,12 +121,17 @@
parent_id = entry.parent_id or ''
# Serialise unknown revisions as NULL_REVISION
last_modified = entry.revision
+ # special cases for /
+ if newpath_utf8 == '/' and not self._versioned_root:
+ if file_id != 'TREE_ROOT':
+ raise errors.BzrError(
+ 'file_id %s is not TREE_ROOT for /' % file_id)
+ if last_modified is not None:
+ raise errors.BzrError(
+ 'Version present for / in %s' % file_id)
+ last_modified = NULL_REVISION
if last_modified is None:
- # only the root is allowed to be unversioned.
- if newpath_utf8 != '/':
- raise errors.BzrError("no version for fileid %s" % file_id)
- else:
- last_modified = NULL_REVISION
+ raise errors.BzrError("no version for fileid %s" % file_id)
self._entry_to_content = {
'directory': _directory_content,
'file': _file_content,
=== modified file 'bzrlib/tests/test_journalled_inv.py'
--- a/bzrlib/tests/test_journalled_inv.py 2008-01-03 21:11:23 +0000
+++ b/bzrlib/tests/test_journalled_inv.py 2008-01-03 21:26:03 +0000
@@ -73,7 +73,7 @@
old_inv = Inventory(None)
new_inv = Inventory(None)
delta = self.make_inv_delta(old_inv, new_inv)
- journal = journalled_inventory.InventoryJournal()
+ journal = journalled_inventory.InventoryJournal(versioned_root=True)
self.assertEqual(StringIO(empty_lines).readlines(),
journal.delta_to_lines(NULL_REVISION, delta))
@@ -84,7 +84,7 @@
root.revision = 'a at e\xe5ample.com--2004'
new_inv.add(root)
delta = self.make_inv_delta(old_inv, new_inv)
- journal = journalled_inventory.InventoryJournal()
+ journal = journalled_inventory.InventoryJournal(versioned_root=True)
self.assertEqual(StringIO(root_only_lines).readlines(),
journal.delta_to_lines(NULL_REVISION, delta))
@@ -97,11 +97,41 @@
non_root = new_inv.make_entry('directory', 'foo', root.file_id, 'id')
new_inv.add(non_root)
delta = self.make_inv_delta(old_inv, new_inv)
- journal = journalled_inventory.InventoryJournal()
- self.assertRaises(errors.BzrError,
- journal.delta_to_lines, NULL_REVISION, delta)
-
-# unversioned root errors when not enabled
+ journal = journalled_inventory.InventoryJournal(versioned_root=True)
+ self.assertRaises(errors.BzrError,
+ journal.delta_to_lines, NULL_REVISION, delta)
+
+ def test_richroot_unversioned_root_errors(self):
+ old_inv = Inventory(None)
+ new_inv = Inventory(None)
+ root = new_inv.make_entry('directory', '', None, 'TREE_ROOT')
+ new_inv.add(root)
+ delta = self.make_inv_delta(old_inv, new_inv)
+ journal = journalled_inventory.InventoryJournal(versioned_root=True)
+ self.assertRaises(errors.BzrError,
+ journal.delta_to_lines, NULL_REVISION, delta)
+
+ def test_nonrichroot_versioned_root_errors(self):
+ old_inv = Inventory(None)
+ new_inv = Inventory(None)
+ root = new_inv.make_entry('directory', '', None, 'TREE_ROOT')
+ root.revision = 'a at e\xe5ample.com--2004'
+ new_inv.add(root)
+ delta = self.make_inv_delta(old_inv, new_inv)
+ journal = journalled_inventory.InventoryJournal(versioned_root=False)
+ self.assertRaises(errors.BzrError,
+ journal.delta_to_lines, NULL_REVISION, delta)
+
+ def test_nonrichroot_non_TREE_ROOT_id_errors(self):
+ old_inv = Inventory(None)
+ new_inv = Inventory(None)
+ root = new_inv.make_entry('directory', '', None, 'my-rich-root-id')
+ new_inv.add(root)
+ delta = self.make_inv_delta(old_inv, new_inv)
+ journal = journalled_inventory.InventoryJournal(versioned_root=False)
+ self.assertRaises(errors.BzrError,
+ journal.delta_to_lines, NULL_REVISION, delta)
+
# unknown kind raises
# tree-reference when not enabled
More information about the bazaar-commits
mailing list