Rev 3571: Add the ability to 'unversion' files, and handle unknown actions. in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/branch_builder
John Arbash Meinel
john at arbash-meinel.com
Tue Jul 22 18:37:03 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/branch_builder
------------------------------------------------------------
revno: 3571
revision-id: john at arbash-meinel.com-20080722173559-3o5pf3v21qlghppy
parent: john at arbash-meinel.com-20080722171545-51t59bf7uij8aftx
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: branch_builder
timestamp: Tue 2008-07-22 12:35:59 -0500
message:
Add the ability to 'unversion' files, and handle unknown actions.
We use 'unversion' because memory_tree doesn't have 'remove', and I don't feel like
implementing it.
-------------- next part --------------
=== modified file 'bzrlib/branchbuilder.py'
--- a/bzrlib/branchbuilder.py 2008-07-22 17:15:45 +0000
+++ b/bzrlib/branchbuilder.py 2008-07-22 17:35:59 +0000
@@ -68,7 +68,7 @@
to_add_file_ids = []
to_add_kinds = []
new_contents = {}
- # to_remove = []
+ to_unversion_ids = []
# to_rename = []
for action, info in actions:
if action == 'add':
@@ -81,6 +81,12 @@
elif action == 'modify':
file_id, content = info
new_contents[file_id] = content
+ elif action == 'unversion':
+ to_unversion_ids.append(info)
+ else:
+ raise errors.UnknownBuildAction(action)
+ if to_unversion_ids:
+ tree.unversion(to_unversion_ids)
tree.add(to_add_paths, to_add_file_ids, to_add_kinds)
for file_id, content in new_contents.iteritems():
tree.put_file_bytes_non_atomic(file_id, content)
=== modified file 'bzrlib/errors.py'
--- a/bzrlib/errors.py 2008-07-14 16:16:48 +0000
+++ b/bzrlib/errors.py 2008-07-22 17:35:59 +0000
@@ -584,6 +584,16 @@
self.key = key
+class UnknownBuildAction(BzrError):
+ """Raised when a BranchBuilder gets an action it doesn't know"""
+
+ _fmt = "Unknown build action: %(action)s"
+
+ def __init__(self, action):
+ BzrError.__init__(self)
+ self.action = action
+
+
class UnknownHook(BzrError):
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
=== modified file 'bzrlib/tests/test_branchbuilder.py'
--- a/bzrlib/tests/test_branchbuilder.py 2008-07-22 17:15:45 +0000
+++ b/bzrlib/tests/test_branchbuilder.py 2008-07-22 17:35:59 +0000
@@ -18,6 +18,7 @@
from bzrlib import (
branch as _mod_branch,
+ errors,
revision as _mod_revision,
tests,
)
@@ -129,3 +130,19 @@
rev_tree.lock_read()
self.addCleanup(rev_tree.unlock)
self.assertEqual('new\ncontent\n', rev_tree.get_file_text('a-id'))
+
+ def test_delete_file(self):
+ builder = self.build_a_rev()
+ rev_id2 = builder.build_snapshot(None, 'B-id',
+ [('unversion', 'a-id')])
+ self.assertEqual('B-id', rev_id2)
+ branch = builder.get_branch()
+ rev_tree = branch.repository.revision_tree(rev_id2)
+ rev_tree.lock_read()
+ self.addCleanup(rev_tree.unlock)
+ self.assertTreeShape([(u'', 'a-root-id', 'directory')], rev_tree)
+
+ def test_unknown_action(self):
+ builder = self.build_a_rev()
+ self.assertRaises(errors.UnknownBuildAction,
+ builder.build_snapshot, None, 'B-id', [('weirdo', ('foo',))])
=== modified file 'bzrlib/tests/test_errors.py'
--- a/bzrlib/tests/test_errors.py 2008-07-14 07:47:45 +0000
+++ b/bzrlib/tests/test_errors.py 2008-07-22 17:35:59 +0000
@@ -502,6 +502,10 @@
"user encoding " + osutils.get_user_encoding(),
str(err))
+ def test_unknown_build_action(self):
+ err = errors.UnknownBuildAction('myaction')
+ self.assertEqual("Unknown build action: myaction", str(err))
+
def test_unknown_format(self):
err = errors.UnknownFormatError('bar', kind='foo')
self.assertEquals("Unknown foo format: 'bar'", str(err))
More information about the bazaar-commits
mailing list