Rev 3781: CommitBuilder can specify a revision_id with record_iter_changes. in http://people.ubuntu.com/~robertc/baz2.0/commit-iterchanges

Robert Collins robertc at robertcollins.net
Tue Nov 18 00:54:44 GMT 2008


At http://people.ubuntu.com/~robertc/baz2.0/commit-iterchanges

------------------------------------------------------------
revno: 3781
revision-id: robertc at robertcollins.net-20081118005440-9fdc3t2ga7szsrbo
parent: robertc at robertcollins.net-20081118004240-234cttl4hm1u9a91
committer: Robert Collins <robertc at robertcollins.net>
branch nick: commit-iterchanges
timestamp: Tue 2008-11-18 11:54:40 +1100
message:
  CommitBuilder can specify a revision_id with record_iter_changes.
modified:
  bzrlib/tests/per_repository/test_commit_builder.py test_commit_builder.py-20060606110838-76e3ra5slucqus81-1
=== modified file 'bzrlib/tests/per_repository/test_commit_builder.py'
--- a/bzrlib/tests/per_repository/test_commit_builder.py	2008-11-18 00:42:40 +0000
+++ b/bzrlib/tests/per_repository/test_commit_builder.py	2008-11-18 00:54:40 +0000
@@ -160,6 +160,44 @@
         self.assertEqual(revision_id,
             tree.branch.repository.get_inventory(revision_id).revision_id)
 
+    def test_commit_with_revision_id_record_iter_changes(self):
+        tree = self.make_branch_and_tree(".")
+        tree.lock_write()
+        try:
+            # use a unicode revision id to test more corner cases.
+            # The repository layer is meant to handle this.
+            revision_id = u'\xc8abc'.encode('utf8')
+            try:
+                try:
+                    builder = tree.branch.get_commit_builder([],
+                        revision_id=revision_id)
+                except errors.NonAsciiRevisionId:
+                    revision_id = 'abc'
+                    builder = tree.branch.get_commit_builder([],
+                        revision_id=revision_id)
+            except errors.CannotSetRevisionId:
+                # This format doesn't support supplied revision ids
+                return
+            self.assertFalse(builder.random_revid)
+            try:
+                builder.record_iter_changes(tree.last_revision(),
+                    tree.iter_changes(tree.basis_tree()))
+                builder.finish_inventory()
+            except:
+                builder.abort()
+                raise
+            builder.finish_inventory()
+            self.assertEqual(revision_id, builder.commit('foo bar'))
+        finally:
+            tree.unlock()
+        self.assertTrue(tree.branch.repository.has_revision(revision_id))
+        # the revision id must be set on the inventory when saving it. This
+        # does not precisely test that - a repository that wants to can add it
+        # on deserialisation, but thats all the current contract guarantees
+        # anyway.
+        self.assertEqual(revision_id,
+            tree.branch.repository.get_inventory(revision_id).revision_id)
+
     def test_commit_without_root_errors(self):
         tree = self.make_branch_and_tree(".")
         tree.lock_write()




More information about the bazaar-commits mailing list