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