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