Rev 2411: Merge WorkingTree implementation back from trunk in http://sourcefrog.net/bzr/dirstate

Martin Pool mbp at sourcefrog.net
Mon Feb 26 03:39:33 GMT 2007


At http://sourcefrog.net/bzr/dirstate

------------------------------------------------------------
revno: 2411
revision-id: mbp at sourcefrog.net-20070226033932-c8fp56jfjksinn2z
parent: mbp at sourcefrog.net-20070226032255-z0w592rrwil1xtqm
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: dirstate
timestamp: Mon 2007-02-26 14:39:32 +1100
message:
  Merge WorkingTree implementation back from trunk
modified:
  bzrlib/tests/workingtree_implementations/test_workingtree.py test_workingtree.py-20060203003124-817757d3e31444fb
  bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
=== modified file 'bzrlib/tests/workingtree_implementations/test_workingtree.py'
--- a/bzrlib/tests/workingtree_implementations/test_workingtree.py	2007-02-25 17:20:22 +0000
+++ b/bzrlib/tests/workingtree_implementations/test_workingtree.py	2007-02-26 03:39:32 +0000
@@ -562,7 +562,9 @@
         self.assertEqual(master_tree.branch.revision_history(),
             tree.branch.revision_history())
 
-    def test_merge_modified(self):
+    def test_merge_modified_detects_corruption(self):
+        # FIXME: This doesn't really test that it works; also this is not
+        # implementation-independent. mbp 20070226
         tree = self.make_branch_and_tree('master')
         tree._control_files.put('merge-hashes', StringIO('asdfasdf'))
         self.assertRaises(errors.MergeModifiedFormatError, tree.merge_modified)

=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py	2007-02-26 03:13:10 +0000
+++ b/bzrlib/workingtree.py	2007-02-26 03:39:32 +0000
@@ -470,10 +470,6 @@
     def get_file_byname(self, filename):
         return file(self.abspath(filename), 'rb')
 
-    def get_symlink_target(self, file_id):
-        file_id = osutils.safe_file_id(file_id)
-        return os.readlink(self.abspath(self.id2path(file_id)))
-
     @needs_read_lock
     def annotate_iter(self, file_id):
         """See Tree.annotate_iter
@@ -849,6 +845,40 @@
             pb.finished()
         return conflicts
 
+    @needs_read_lock
+    def merge_modified(self):
+        try:
+            hashfile = self._control_files.get('merge-hashes')
+        except errors.NoSuchFile:
+            return {}
+        merge_hashes = {}
+        try:
+            if hashfile.next() != MERGE_MODIFIED_HEADER_1 + '\n':
+                raise errors.MergeModifiedFormatError()
+        except StopIteration:
+            raise errors.MergeModifiedFormatError()
+        for s in RioReader(hashfile):
+            file_id = s.get("file_id")
+            if file_id not in self.inventory:
+                continue
+            hash = s.get("hash")
+            if hash == self.get_file_sha1(file_id):
+                merge_hashes[file_id] = hash
+        return merge_hashes
+
+    @needs_write_lock
+    def mkdir(self, path, file_id=None):
+        """See MutableTree.mkdir()."""
+        if file_id is None:
+            file_id = generate_ids.gen_file_id(os.path.basename(path))
+        os.mkdir(self.abspath(path))
+        self.add(path, file_id, 'directory')
+        return file_id
+
+    def get_symlink_target(self, file_id):
+        file_id = osutils.safe_file_id(file_id)
+        return os.readlink(self.id2abspath(file_id))
+
     @needs_write_lock
     def subsume(self, other_tree):
         def add_children(inventory, entry):




More information about the bazaar-commits mailing list