Rev 5722: (jelmer) Allow CommitBuilder implementations to not provide a in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Mon Mar 14 14:42:21 UTC 2011


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 5722 [merge]
revision-id: pqm at pqm.ubuntu.com-20110314144218-nubbkx0b9vwm5ma4
parent: pqm at pqm.ubuntu.com-20110314120853-ot5tnefih540reoa
parent: jelmer at samba.org-20110313222243-d9il183py6ry0gry
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2011-03-14 14:42:18 +0000
message:
  (jelmer) Allow CommitBuilder implementations to not provide a
   record_entry_contents implementation. (Jelmer Vernooij)
modified:
  bzrlib/commit.py               commit.py-20050511101309-79ec1a0168e0e825
  bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/per_repository/test_commit_builder.py test_commit_builder.py-20060606110838-76e3ra5slucqus81-1
=== modified file 'bzrlib/commit.py'
--- a/bzrlib/commit.py	2011-02-08 15:35:14 +0000
+++ b/bzrlib/commit.py	2011-03-13 22:22:43 +0000
@@ -326,7 +326,7 @@
                 minimum_path_selection(specific_files))
         else:
             self.specific_files = None
-            
+
         self.allow_pointless = allow_pointless
         self.message_callback = message_callback
         self.timestamp = timestamp
@@ -402,6 +402,9 @@
         self._set_progress_stage("Collecting changes", counter=True)
         self.builder = self.branch.get_commit_builder(self.parents,
             self.config, timestamp, timezone, committer, self.revprops, rev_id)
+        if not self.builder.supports_record_entry_contents and self.exclude:
+            self.builder.abort()
+            raise errors.ExcludesUnsupported(self.branch.repository)
 
         try:
             self.builder.will_record_deletes()

=== modified file 'bzrlib/errors.py'
--- a/bzrlib/errors.py	2011-02-25 12:12:39 +0000
+++ b/bzrlib/errors.py	2011-03-12 23:58:55 +0000
@@ -1140,6 +1140,15 @@
         BzrError.__init__(self, files=files, files_str=files_str)
 
 
+class ExcludesUnsupported(BzrError):
+
+    _fmt = ('Excluding paths during commit is not supported by '
+            'repository at %(repository)r.')
+
+    def __init__(self, repository):
+        BzrError.__init__(self, repository=repository)
+
+
 class BadCommitMessageEncoding(BzrError):
 
     _fmt = 'The specified commit message contains characters unsupported by '\

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2011-03-12 21:22:14 +0000
+++ b/bzrlib/repository.py	2011-03-13 00:09:12 +0000
@@ -94,6 +94,8 @@
     record_root_entry = True
     # the default CommitBuilder does not manage trees whose root is versioned.
     _versioned_root = False
+    # this commit builder supports the record_entry_contents interface
+    supports_record_entry_contents = True
 
     def __init__(self, repository, parents, config, timestamp=None,
                  timezone=None, committer=None, revprops=None,

=== modified file 'bzrlib/tests/per_repository/test_commit_builder.py'
--- a/bzrlib/tests/per_repository/test_commit_builder.py	2011-03-08 21:06:19 +0000
+++ b/bzrlib/tests/per_repository/test_commit_builder.py	2011-03-13 15:22:28 +0000
@@ -60,6 +60,9 @@
         tree.lock_write()
         try:
             builder = tree.branch.get_commit_builder([])
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't support "
+                    "record_entry_contents")
             repo = tree.branch.repository
             self.record_root(builder, tree)
             builder.finish_inventory()
@@ -84,11 +87,14 @@
         finally:
             tree.unlock()
 
-    def test_abort(self):
+    def test_abort_record_entry_contents(self):
         tree = self.make_branch_and_tree(".")
         tree.lock_write()
         try:
             builder = tree.branch.get_commit_builder([])
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't support "
+                    "record_entry_contents")
             self.record_root(builder, tree)
             builder.finish_inventory()
             builder.abort()
@@ -116,7 +122,8 @@
         tree.lock_write()
         try:
             builder = tree.branch.get_commit_builder([])
-            self.record_root(builder, tree)
+            list(builder.record_iter_changes(tree, tree.last_revision(),
+                tree.iter_changes(tree.basis_tree())))
             builder.finish_inventory()
             rev_id = builder.commit('foo bar blah')
         finally:
@@ -124,7 +131,7 @@
         rev = tree.branch.repository.get_revision(rev_id)
         self.assertEqual('foo bar blah', rev.message)
 
-    def test_commit_with_revision_id(self):
+    def test_commit_with_revision_id_record_entry_contents(self):
         tree = self.make_branch_and_tree(".")
         tree.lock_write()
         try:
@@ -142,6 +149,9 @@
             except errors.CannotSetRevisionId:
                 # This format doesn't support supplied revision ids
                 return
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't support "
+                    "record_entry_contents")
             self.assertFalse(builder.random_revid)
             self.record_root(builder, tree)
             builder.finish_inventory()
@@ -218,6 +228,9 @@
             tree.add('foo', 'foo-id')
             entry = tree.inventory['foo-id']
             builder = tree.branch.get_commit_builder([])
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't support "
+                    "record_entry_contents")
             self.assertRaises(errors.RootMissing,
                 builder.record_entry_contents, entry, [], 'foo', tree,
                     tree.path_content_summary('foo'))
@@ -225,7 +238,7 @@
         finally:
             tree.unlock()
 
-    def test_commit_unchanged_root(self):
+    def test_commit_unchanged_root_record_entry_contents(self):
         tree = self.make_branch_and_tree(".")
         old_revision_id = tree.commit('')
         tree.lock_write()
@@ -234,6 +247,9 @@
         self.addCleanup(parent_tree.unlock)
         builder = tree.branch.get_commit_builder([old_revision_id])
         try:
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't support "
+                    "record_entry_contents")
             ie = inventory.make_entry('directory', '', None,
                     tree.get_root_id())
             delta, version_recorded, fs_hash = builder.record_entry_contents(
@@ -285,11 +301,14 @@
             builder.abort()
             tree.unlock()
 
-    def test_commit(self):
+    def test_commit_record_entry_contents(self):
         tree = self.make_branch_and_tree(".")
         tree.lock_write()
         try:
             builder = tree.branch.get_commit_builder([])
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't "
+                    "support record_entry_contents")
             self.record_root(builder, tree)
             builder.finish_inventory()
             rev_id = builder.commit('foo bar')
@@ -317,6 +336,9 @@
             builder = tree.branch.get_commit_builder([old_revision_id])
             total_delta = []
             try:
+                if not builder.supports_record_entry_contents:
+                    raise tests.TestNotApplicable("CommitBuilder doesn't "
+                        "support record_entry_contents")
                 parent_invs = [basis.inventory]
                 builder.will_record_deletes()
                 if builder.record_root_entry:
@@ -372,6 +394,9 @@
             basis = tree.branch.repository.revision_tree(rev_id)
             builder = tree.branch.get_commit_builder([rev_id])
             try:
+                if not builder.supports_record_entry_contents:
+                    raise tests.TestNotApplicable("CommitBuilder doesn't "
+                        "support record_entry_contents")
                 builder.will_record_deletes()
                 if builder.record_root_entry is True:
                     parent_invs = [basis.inventory]
@@ -432,6 +457,9 @@
         try:
             builder = tree.branch.get_commit_builder([rev_id])
             try:
+                if not builder.supports_record_entry_contents:
+                    raise tests.TestNotApplicable("CommitBuilder doesn't "
+                        "support record_entry_contents")
                 self.record_root(builder, tree)
                 self.assertRaises(AssertionError,
                     builder.record_delete, "foo", "foo-id")
@@ -440,11 +468,14 @@
         finally:
             tree.unlock()
 
-    def test_revision_tree(self):
+    def test_revision_tree_record_entry_contents(self):
         tree = self.make_branch_and_tree(".")
         tree.lock_write()
         try:
             builder = tree.branch.get_commit_builder([])
+            if not builder.supports_record_entry_contents:
+                raise tests.TestNotApplicable("CommitBuilder doesn't "
+                    "support record_entry_contents")
             self.record_root(builder, tree)
             builder.finish_inventory()
             rev_id = builder.commit('foo bar')
@@ -794,6 +825,9 @@
             parent_ids = tree.get_parent_ids()
             builder = tree.branch.get_commit_builder(parent_ids)
             try:
+                if not builder.supports_record_entry_contents:
+                    raise tests.TestNotApplicable("CommitBuilder doesn't "
+                        "support record_entry_contents")
                 parent_tree = tree.basis_tree()
                 parent_tree.lock_read()
                 self.addCleanup(parent_tree.unlock)
@@ -914,10 +948,11 @@
                 self.assertFalse(version_recorded)
             self.assertIs(None, builder.new_inventory)
             builder.finish_inventory()
-            inv_key = (builder._new_revision_id,)
-            inv_sha1 = tree.branch.repository.inventories.get_sha1s(
-                            [inv_key])[inv_key]
-            self.assertEqual(inv_sha1, builder.inv_sha1)
+            if tree.branch.repository._format.supports_full_versioned_files:
+                inv_key = (builder._new_revision_id,)
+                inv_sha1 = tree.branch.repository.inventories.get_sha1s(
+                                [inv_key])[inv_key]
+                self.assertEqual(inv_sha1, builder.inv_sha1)
             self.assertIs(None, builder.new_inventory)
             new_inventory = builder.revision_tree().inventory
             new_entry = new_inventory[file_id]




More information about the bazaar-commits mailing list