Rev 3177: Return the sha1 and validator with the serialised inventory journal entry. in http://people.ubuntu.com/~robertc/baz2.0/inventory.journalled

Robert Collins robertc at robertcollins.net
Sun Jan 6 23:20:58 GMT 2008


At http://people.ubuntu.com/~robertc/baz2.0/inventory.journalled

------------------------------------------------------------
revno: 3177
revision-id:robertc at robertcollins.net-20080106232051-ry3g48jurtr1w2bw
parent: robertc at robertcollins.net-20080106225428-subkfjp082a0t1ya
committer: Robert Collins <robertc at robertcollins.net>
branch nick: inventory.journalled
timestamp: Mon 2008-01-07 10:20:51 +1100
message:
  Return the sha1 and validator with the serialised inventory journal entry.
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-06 22:54:28 +0000
+++ b/bzrlib/journalled_inventory.py	2008-01-06 23:20:51 +0000
@@ -26,7 +26,7 @@
 __all__ = ['EntryAccess', 'InventoryJournal']
 
 from bzrlib import errors
-from bzrlib.osutils import basename, sha_string
+from bzrlib.osutils import basename, sha_string, sha_strings
 from bzrlib import inventory
 from bzrlib.revision import NULL_REVISION
 from bzrlib.tsort import topo_sort
@@ -275,6 +275,8 @@
             delta.
         :param delta_to_new: An inventory delta such as Inventory.apply_delta
             takes.
+        :return: The serialised delta as lines, the sha1 of the lines, and the
+            journal entry validator.
         """
         lines = ['', '', '', '']
         to_line = self._delta_item_to_line
@@ -288,7 +290,12 @@
         lines[1] = "parent: %s\n" % old_inventory_name
         lines[2] = "parent_validator: %s\n" % old_validator
         lines[3] = "version: %s\n" % new_name
-        return lines
+        lines_sha = sha_strings(lines)
+        if old_inventory_name == NULL_REVISION:
+            validator = lines_sha
+        else:
+            validator = sha_string(old_validator + lines_sha)
+        return lines, lines_sha, validator
 
     def _delta_item_to_line(self, delta_item):
         """Convert delta_item to a line."""

=== modified file 'bzrlib/tests/test_journalled_inv.py'
--- a/bzrlib/tests/test_journalled_inv.py	2008-01-06 22:54:28 +0000
+++ b/bzrlib/tests/test_journalled_inv.py	2008-01-06 23:20:51 +0000
@@ -44,6 +44,8 @@
 version: entry-version
 /\x00an-id\x00\x00a at e\xc3\xa5ample.com--2004\x00dir\x00\x00
 """
+root_only_validator = "4064d5f6ecde08d963e14b426fd10a6624d33a07"
+
 
 root_change_lines = """format: bzr journalled inventory v1 (bzr 1.2)
 parent: entry-version
@@ -82,9 +84,9 @@
 """
 
 validator_only = """format: bzr journalled inventory v1 (bzr 1.2)
-parent: null:
-parent_validator: abc
-version: entry-version
+parent: entry-version
+parent_validator: 4064d5f6ecde08d963e14b426fd10a6624d33a07
+version: new-entry
 """
 
 
@@ -97,7 +99,9 @@
         delta = inventory.make_inv_delta(old_inv, new_inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=True,
             tree_references=True)
-        self.assertEqual(StringIO(empty_lines).readlines(),
+        self.assertEqual((StringIO(empty_lines).readlines(),
+            '47177375263abcfd2b41eafde1ca79c0c69b3a44',
+            '47177375263abcfd2b41eafde1ca79c0c69b3a44'),
             journal.delta_to_lines(NULL_REVISION, "", NULL_REVISION, delta))
 
     def test_root_only_to_lines(self):
@@ -109,7 +113,8 @@
         delta = inventory.make_inv_delta(old_inv, new_inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=True,
             tree_references=True)
-        self.assertEqual(StringIO(root_only_lines).readlines(),
+        self.assertEqual((StringIO(root_only_lines).readlines(),
+            root_only_validator, root_only_validator),
             journal.delta_to_lines(NULL_REVISION, "", 'entry-version', delta))
 
     def test_unversioned_root(self):
@@ -120,17 +125,23 @@
         delta = inventory.make_inv_delta(old_inv, new_inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=False,
             tree_references=False)
-        self.assertEqual(StringIO(root_only_unversioned).readlines(),
+        self.assertEqual((StringIO(root_only_unversioned).readlines(),
+            '34627d3eb81bd954ef7fd6d3922cf1ab9d3186aa',
+            '34627d3eb81bd954ef7fd6d3922cf1ab9d3186aa'),
             journal.delta_to_lines(NULL_REVISION, "", 'entry-version', delta))
 
-    def test_validator_stored(self):
+    def test_old_validator_stored_new_validator_returned(self):
         old_inv = Inventory(None)
         new_inv = Inventory(None)
         delta = inventory.make_inv_delta(old_inv, new_inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=False,
             tree_references=False)
-        self.assertEqual(StringIO(validator_only).readlines(),
-            journal.delta_to_lines(NULL_REVISION, "abc", 'entry-version', delta))
+        lines_sha = sha_string(validator_only)
+        self.assertEqual((StringIO(validator_only).readlines(),
+            lines_sha,
+            sha_string(root_only_validator + lines_sha)),
+            journal.delta_to_lines('entry-version', root_only_validator,
+                'new-entry', delta))
 
     def test_unversioned_non_root_errors(self):
         old_inv = Inventory(None)
@@ -231,7 +242,9 @@
         delta = inventory.make_inv_delta(old_inv, new_inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=True,
             tree_references=True)
-        self.assertEqual(StringIO(reference_lines).readlines(),
+        self.assertEqual((StringIO(reference_lines).readlines(),
+            '70f7bd3ff76816ed74c8c0a11c2b6f63449b5546',
+            '70f7bd3ff76816ed74c8c0a11c2b6f63449b5546'),
             journal.delta_to_lines(NULL_REVISION, "", 'entry-version', delta))
 
     def test_parse_no_bytes(self):
@@ -550,10 +563,12 @@
         delta = inventory.make_inv_delta(old_inv, inv)
         journal = journalled_inventory.InventoryJournal(versioned_root=True,
             tree_references=True)
-        lines = journal.delta_to_lines(NULL_REVISION, "", inv.revision_id, delta)
+        lines, lines_sha, validator = journal.delta_to_lines(NULL_REVISION, "",
+            inv.revision_id, delta)
         serialised = ''.join(lines)
         self.assertIsInstance(serialised, str)
         self.assertEqual(expected, serialised)
+        self.assertEqual(validator, journal_entry.get_validator())
 
 
 class TestContent(TestCase):



More information about the bazaar-commits mailing list