Rev 3570: Add an action for modifying an existing file 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:16:48 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/branch_builder

------------------------------------------------------------
revno: 3570
revision-id: john at arbash-meinel.com-20080722171545-51t59bf7uij8aftx
parent: john at arbash-meinel.com-20080722170741-yy0w48dac09xp1lz
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: branch_builder
timestamp: Tue 2008-07-22 12:15:45 -0500
message:
  Add an action for modifying an existing file
-------------- next part --------------
=== modified file 'bzrlib/branchbuilder.py'
--- a/bzrlib/branchbuilder.py	2008-07-22 17:03:55 +0000
+++ b/bzrlib/branchbuilder.py	2008-07-22 17:15:45 +0000
@@ -67,7 +67,7 @@
             to_add_paths = []
             to_add_file_ids = []
             to_add_kinds = []
-            to_add_contents = {}
+            new_contents = {}
             # to_remove = []
             # to_rename = []
             for action, info in actions:
@@ -77,9 +77,12 @@
                     to_add_file_ids.append(file_id)
                     to_add_kinds.append(kind)
                     if content is not None:
-                        to_add_contents[file_id] = content
+                        new_contents[file_id] = content
+                elif action == 'modify':
+                    file_id, content = info
+                    new_contents[file_id] = content
             tree.add(to_add_paths, to_add_file_ids, to_add_kinds)
-            for file_id, content in to_add_contents.iteritems():
+            for file_id, content in new_contents.iteritems():
                 tree.put_file_bytes_non_atomic(file_id, content)
 
             return tree.commit('commit %s' % (revision_id,), rev_id=revision_id)

=== modified file 'bzrlib/tests/test_branchbuilder.py'
--- a/bzrlib/tests/test_branchbuilder.py	2008-07-22 17:07:41 +0000
+++ b/bzrlib/tests/test_branchbuilder.py	2008-07-22 17:15:45 +0000
@@ -26,16 +26,6 @@
 
 class TestBranchBuilder(tests.TestCaseWithMemoryTransport):
     
-    def assertTreeShape(self, expected_shape, tree):
-        """Check that the tree shape matches expectations."""
-        tree.lock_read()
-        try:
-            entries = [(path, ie.file_id, ie.kind)
-                       for path, ie in tree.iter_entries_by_dir()]
-        finally:
-            tree.unlock()
-        self.assertEqual(expected_shape, entries)
-
     def test_create(self):
         """Test the constructor api."""
         builder = BranchBuilder(self.get_transport().clone('foo'))
@@ -82,27 +72,40 @@
             [rev_id1],
             branch.repository.get_revision(branch.last_revision()).parent_ids)
 
-    def test_build_snapshot(self):
+
+class TestBranchBuilderBuildSnapshot(tests.TestCaseWithMemoryTransport):
+
+    def assertTreeShape(self, expected_shape, tree):
+        """Check that the tree shape matches expectations."""
+        tree.lock_read()
+        try:
+            entries = [(path, ie.file_id, ie.kind)
+                       for path, ie in tree.iter_entries_by_dir()]
+        finally:
+            tree.unlock()
+        self.assertEqual(expected_shape, entries)
+
+    def build_a_rev(self):
         builder = BranchBuilder(self.get_transport().clone('foo'))
         rev_id1 = builder.build_snapshot(None, 'A-id',
             [('add', ('', 'a-root-id', 'directory', None)),
              ('add', ('a', 'a-id', 'file', 'contents'))])
         self.assertEqual('A-id', rev_id1)
+        return builder
+
+    def test_add_one_file(self):
+        builder = self.build_a_rev()
         branch = builder.get_branch()
-        self.assertEqual((1, rev_id1), branch.last_revision_info())
-        rev_tree = branch.repository.revision_tree(rev_id1)
+        self.assertEqual((1, 'A-id'), branch.last_revision_info())
+        rev_tree = branch.repository.revision_tree('A-id')
         rev_tree.lock_read()
         self.addCleanup(rev_tree.unlock)
         self.assertTreeShape([(u'', 'a-root-id', 'directory'),
                               (u'a', 'a-id', 'file')], rev_tree)
         self.assertEqual('contents', rev_tree.get_file_text('a-id'))
 
-    def test_build_snapshot_add_content(self):
-        builder = BranchBuilder(self.get_transport().clone('foo'))
-        rev_id1 = builder.build_snapshot(None, 'A-id',
-            [('add', ('', 'a-root-id', 'directory', None)),
-             ('add', ('a', 'a-id', 'file', 'contents'))])
-        self.assertEqual('A-id', rev_id1)
+    def test_add_second_file(self):
+        builder = self.build_a_rev()
         rev_id2 = builder.build_snapshot(None, 'B-id',
             [('add', ('b', 'b-id', 'file', 'content_b'))])
         self.assertEqual('B-id', rev_id2)
@@ -115,3 +118,14 @@
                               (u'a', 'a-id', 'file'),
                               (u'b', 'b-id', 'file')], rev_tree)
         self.assertEqual('content_b', rev_tree.get_file_text('b-id'))
+
+    def test_modify_file(self):
+        builder = self.build_a_rev()
+        rev_id2 = builder.build_snapshot(None, 'B-id',
+            [('modify', ('a-id', 'new\ncontent\n'))])
+        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.assertEqual('new\ncontent\n', rev_tree.get_file_text('a-id'))



More information about the bazaar-commits mailing list