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