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