Merge lp:~jelmer/brz/remove-unused into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/remove-unused
Merge into: lp:brz
Diff against target: 666 lines (+93/-196)
20 files modified
breezy/builtins.py (+7/-7)
breezy/bzr/bundle/bundle_data.py (+17/-24)
breezy/bzr/bundle/serializer/v08.py (+4/-3)
breezy/bzr/inventorytree.py (+0/-4)
breezy/bzr/vf_repository.py (+3/-2)
breezy/bzr/workingtree.py (+3/-9)
breezy/bzr/workingtree_4.py (+7/-11)
breezy/git/tests/test_memorytree.py (+8/-9)
breezy/git/tree.py (+0/-15)
breezy/merge.py (+5/-1)
breezy/tests/blackbox/test_join.py (+2/-2)
breezy/tests/per_tree/test_tree.py (+0/-14)
breezy/tests/per_workingtree/test_commit.py (+11/-23)
breezy/tests/per_workingtree/test_executable.py (+7/-10)
breezy/tests/test_bundle.py (+6/-26)
breezy/tests/test_commit.py (+2/-2)
breezy/tests/test_memorytree.py (+1/-1)
breezy/tests/test_shelf.py (+6/-6)
breezy/tests/test_smart_add.py (+4/-3)
breezy/transform.py (+0/-24)
To merge this branch: bzr merge lp:~jelmer/brz/remove-unused
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+373320@code.launchpad.net

Commit message

Remove Tree.has_id.

Description of the change

Remove Tree.has_id.

This call is O(n-subtrees).

Replace with Tree.id2path or (where possible) avoid it altogether.

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :

Changes here all look sensible. I'm down with making expensive things look expensive.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/builtins.py'
--- breezy/builtins.py 2019-08-11 13:33:45 +0000
+++ breezy/builtins.py 2019-10-13 15:35:30 +0000
@@ -2386,13 +2386,13 @@
2386 self.enter_context(tree.lock_read())2386 self.enter_context(tree.lock_read())
2387 old = tree.basis_tree()2387 old = tree.basis_tree()
2388 self.enter_context(old.lock_read())2388 self.enter_context(old.lock_read())
2389 for path, ie in old.iter_entries_by_dir():2389 delta = tree.changes_from(old)
2390 if not tree.has_id(ie.file_id):2390 for change in delta.removed:
2391 self.outf.write(path)2391 self.outf.write(change.path[0])
2392 if show_ids:2392 if show_ids:
2393 self.outf.write(' ')2393 self.outf.write(' ')
2394 self.outf.write(ie.file_id)2394 self.outf.write(change.file_id)
2395 self.outf.write('\n')2395 self.outf.write('\n')
23962396
23972397
2398class cmd_modified(Command):2398class cmd_modified(Command):
23992399
=== modified file 'breezy/bzr/bundle/bundle_data.py'
--- breezy/bzr/bundle/bundle_data.py 2019-09-21 15:10:27 +0000
+++ breezy/bzr/bundle/bundle_data.py 2019-10-13 15:35:30 +0000
@@ -32,6 +32,7 @@
32from ...errors import (32from ...errors import (
33 TestamentMismatch,33 TestamentMismatch,
34 BzrError,34 BzrError,
35 NoSuchId,
35 )36 )
36from ..inventory import (37from ..inventory import (
37 Inventory,38 Inventory,
@@ -486,7 +487,6 @@
486 self.patches = {}487 self.patches = {}
487 self._targets = {} # new path => new symlink target488 self._targets = {} # new path => new symlink target
488 self.deleted = []489 self.deleted = []
489 self.contents_by_id = True
490 self.revision_id = revision_id490 self.revision_id = revision_id
491 self._inventory = None491 self._inventory = None
492492
@@ -602,22 +602,13 @@
602 return path602 return path
603 old_path = self.base_tree.id2path(file_id)603 old_path = self.base_tree.id2path(file_id)
604 if old_path is None:604 if old_path is None:
605 return None605 raise NoSuchId(file_id, self)
606 if old_path in self.deleted:606 if old_path in self.deleted:
607 return None607 raise NoSuchId(file_id, self)
608 return self.new_path(old_path)608 new_path = self.new_path(old_path)
609609 if new_path is None:
610 def old_contents_id(self, file_id):610 raise NoSuchId(file_id, self)
611 """Return the id in the base_tree for the given file_id.611 return new_path
612 Return None if the file did not exist in base.
613 """
614 if self.contents_by_id:
615 if self.base_tree.has_id(file_id):
616 return file_id
617 else:
618 return None
619 new_path = self.id2path(file_id)
620 return self.base_tree.path2id(new_path)
621612
622 def get_file(self, path):613 def get_file(self, path):
623 """Return a file-like object containing the new contents of the614 """Return a file-like object containing the new contents of the
@@ -628,13 +619,14 @@
628 then be cached.619 then be cached.
629 """620 """
630 file_id = self.path2id(path)621 file_id = self.path2id(path)
631 base_id = self.old_contents_id(file_id)622 try:
632 if (base_id is not None and623 old_path = self.base_tree.id2path(file_id)
633 base_id != self.base_tree.path2id('')):624 except NoSuchId:
634 old_path = self.base_tree.id2path(base_id)625 patch_original = None
626 else:
627 if old_path is None:
628 import pdb; pdb.set_trace()
635 patch_original = self.base_tree.get_file(old_path)629 patch_original = self.base_tree.get_file(old_path)
636 else:
637 patch_original = None
638 file_patch = self.patches.get(path)630 file_patch = self.patches.get(path)
639 if file_patch is None:631 if file_patch is None:
640 if (patch_original is None and632 if (patch_original is None and
@@ -780,8 +772,9 @@
780 for result in viewitems(self._new_id):772 for result in viewitems(self._new_id):
781 paths.append(result)773 paths.append(result)
782 for id in self.base_tree.all_file_ids():774 for id in self.base_tree.all_file_ids():
783 path = self.id2path(id)775 try:
784 if path is None:776 path = self.id2path(id)
777 except NoSuchId:
785 continue778 continue
786 paths.append((path, id))779 paths.append((path, id))
787 paths.sort()780 paths.sort()
788781
=== modified file 'breezy/bzr/bundle/serializer/v08.py'
--- breezy/bzr/bundle/serializer/v08.py 2019-09-21 19:27:04 +0000
+++ breezy/bzr/bundle/serializer/v08.py 2019-10-13 15:35:30 +0000
@@ -269,13 +269,14 @@
269269
270 def do_diff(file_id, old_path, new_path, action, force_binary):270 def do_diff(file_id, old_path, new_path, action, force_binary):
271 def tree_lines(tree, path, require_text=False):271 def tree_lines(tree, path, require_text=False):
272 if tree.has_id(file_id):272 try:
273 tree_file = tree.get_file(path)273 tree_file = tree.get_file(path)
274 except errors.NoSuchFile:
275 return []
276 else:
274 if require_text is True:277 if require_text is True:
275 tree_file = text_file(tree_file)278 tree_file = text_file(tree_file)
276 return tree_file.readlines()279 return tree_file.readlines()
277 else:
278 return []
279280
280 try:281 try:
281 if force_binary:282 if force_binary:
282283
=== modified file 'breezy/bzr/inventorytree.py'
--- breezy/bzr/inventorytree.py 2019-09-25 19:11:10 +0000
+++ breezy/bzr/inventorytree.py 2019-10-13 15:35:30 +0000
@@ -172,10 +172,6 @@
172 inventory, file_id = self._unpack_file_id(file_id)172 inventory, file_id = self._unpack_file_id(file_id)
173 return inventory.id2path(file_id)173 return inventory.id2path(file_id)
174174
175 def has_id(self, file_id):
176 inventory, file_id = self._unpack_file_id(file_id)
177 return inventory.has_id(file_id)
178
179 def all_file_ids(self):175 def all_file_ids(self):
180 return {entry.file_id for path, entry in self.iter_entries_by_dir()}176 return {entry.file_id for path, entry in self.iter_entries_by_dir()}
181177
182178
=== modified file 'breezy/bzr/vf_repository.py'
--- breezy/bzr/vf_repository.py 2019-07-25 23:22:30 +0000
+++ breezy/bzr/vf_repository.py 2019-10-13 15:35:30 +0000
@@ -2916,9 +2916,10 @@
2916 # the parents inserted are not those commit would do - in particular2916 # the parents inserted are not those commit would do - in particular
2917 # they are not filtered by heads(). RBC, AB2917 # they are not filtered by heads(). RBC, AB
2918 for revision, tree in viewitems(parent_trees):2918 for revision, tree in viewitems(parent_trees):
2919 if not tree.has_id(ie.file_id):2919 try:
2920 path = tree.id2path(ie.file_id)
2921 except errors.NoSuchId:
2920 continue2922 continue
2921 path = tree.id2path(ie.file_id)
2922 parent_id = tree.get_file_revision(path)2923 parent_id = tree.get_file_revision(path)
2923 if parent_id in text_parents:2924 if parent_id in text_parents:
2924 continue2925 continue
29252926
=== modified file 'breezy/bzr/workingtree.py'
--- breezy/bzr/workingtree.py 2019-09-25 19:11:10 +0000
+++ breezy/bzr/workingtree.py 2019-10-13 15:35:30 +0000
@@ -658,14 +658,6 @@
658 self._set_inventory(result, dirty=False)658 self._set_inventory(result, dirty=False)
659 return result659 return result
660660
661 def has_id(self, file_id):
662 # files that have been deleted are excluded
663 inv, inv_file_id = self._unpack_file_id(file_id)
664 if not inv.has_id(inv_file_id):
665 return False
666 path = inv.id2path(inv_file_id)
667 return osutils.lexists(self.abspath(path))
668
669 def all_file_ids(self):661 def all_file_ids(self):
670 """Iterate through file_ids for this tree.662 """Iterate through file_ids for this tree.
671663
@@ -1368,7 +1360,9 @@
1368 if after:1360 if after:
1369 basis = self.basis_tree()1361 basis = self.basis_tree()
1370 with basis.lock_read():1362 with basis.lock_read():
1371 if not basis.has_id(to_id):1363 try:
1364 basis.id2path(to_id)
1365 except errors.NoSuchId:
1372 rename_entry.change_id = True1366 rename_entry.change_id = True
1373 allowed = True1367 allowed = True
1374 if not allowed:1368 if not allowed:
13751369
=== modified file 'breezy/bzr/workingtree_4.py'
--- breezy/bzr/workingtree_4.py 2019-09-25 19:11:10 +0000
+++ breezy/bzr/workingtree_4.py 2019-10-13 15:35:30 +0000
@@ -175,9 +175,13 @@
175 if sub_tree_id == self.path2id(''):175 if sub_tree_id == self.path2id(''):
176 raise BadReferenceTarget(self, sub_tree,176 raise BadReferenceTarget(self, sub_tree,
177 'Trees have the same root id.')177 'Trees have the same root id.')
178 if self.has_id(sub_tree_id):178 try:
179 raise BadReferenceTarget(self, sub_tree,179 self.id2path(sub_tree_id)
180 'Root id already present in tree')180 except errors.NoSuchId:
181 pass
182 else:
183 raise BadReferenceTarget(
184 self, sub_tree, 'Root id already present in tree')
181 self._add([sub_tree_path], [sub_tree_id], ['tree-reference'])185 self._add([sub_tree_path], [sub_tree_id], ['tree-reference'])
182186
183 def break_lock(self):187 def break_lock(self):
@@ -467,14 +471,6 @@
467 def get_nested_tree(self, path):471 def get_nested_tree(self, path):
468 return WorkingTree.open(self.abspath(path))472 return WorkingTree.open(self.abspath(path))
469473
470 def has_id(self, file_id):
471 state = self.current_dirstate()
472 row, parents = self._get_entry(file_id=file_id)
473 if row is None:
474 return False
475 return osutils.lexists(pathjoin(
476 self.basedir, row[0].decode('utf8'), row[1].decode('utf8')))
477
478 def id2path(self, file_id):474 def id2path(self, file_id):
479 "Convert a file-id to a path."475 "Convert a file-id to a path."
480 with self.lock_read():476 with self.lock_read():
481477
=== modified file 'breezy/git/tests/test_memorytree.py'
--- breezy/git/tests/test_memorytree.py 2018-11-11 04:08:32 +0000
+++ breezy/git/tests/test_memorytree.py 2019-10-13 15:35:30 +0000
@@ -142,19 +142,18 @@
142 """Some test for unversion of a memory tree."""142 """Some test for unversion of a memory tree."""
143 branch = self.make_branch('branch')143 branch = self.make_branch('branch')
144 tree = branch.create_memorytree()144 tree = branch.create_memorytree()
145 tree.lock_write()145 with tree.lock_write():
146 tree.add(['', 'foo'], kinds=['directory', 'file'])146 tree.add(['', 'foo'], kinds=['directory', 'file'])
147 tree.unversion(['foo'])147 tree.unversion(['foo'])
148 self.assertFalse(tree.has_id(b'foo-id'))148 self.assertFalse(tree.is_versioned('foo'))
149 tree.unlock()149 self.assertFalse(tree.has_filename('foo'))
150150
151 def test_last_revision(self):151 def test_last_revision(self):
152 """There should be a last revision method we can call."""152 """There should be a last revision method we can call."""
153 tree = self.make_branch_and_memory_tree('branch')153 tree = self.make_branch_and_memory_tree('branch')
154 tree.lock_write()154 with tree.lock_write():
155 tree.add('')155 tree.add('')
156 rev_id = tree.commit('first post')156 rev_id = tree.commit('first post')
157 tree.unlock()
158 self.assertEqual(rev_id, tree.last_revision())157 self.assertEqual(rev_id, tree.last_revision())
159158
160 def test_rename_file(self):159 def test_rename_file(self):
161160
=== modified file 'breezy/git/tree.py'
--- breezy/git/tree.py 2019-09-25 19:11:10 +0000
+++ breezy/git/tree.py 2019-10-13 15:35:30 +0000
@@ -360,13 +360,6 @@
360 todo.append((store, subpath, hexsha))360 todo.append((store, subpath, hexsha))
361 return ret361 return ret
362362
363 def has_id(self, file_id):
364 try:
365 path = self.id2path(file_id)
366 except errors.NoSuchId:
367 return False
368 return self.has_filename(path)
369
370 def _lookup_path(self, path):363 def _lookup_path(self, path):
371 if self.tree is None:364 if self.tree is None:
372 raise errors.NoSuchFile(path)365 raise errors.NoSuchFile(path)
@@ -1024,14 +1017,6 @@
1024 osutils.safe_unicode(path))1017 osutils.safe_unicode(path))
1025 return None1018 return None
10261019
1027 def has_id(self, file_id):
1028 try:
1029 self.id2path(file_id)
1030 except errors.NoSuchId:
1031 return False
1032 else:
1033 return True
1034
1035 def id2path(self, file_id):1020 def id2path(self, file_id):
1036 if file_id is None:1021 if file_id is None:
1037 return ''1022 return ''
10381023
=== modified file 'breezy/merge.py'
--- breezy/merge.py 2019-09-22 15:13:51 +0000
+++ breezy/merge.py 2019-10-13 15:35:30 +0000
@@ -1854,7 +1854,11 @@
1854 name_in_target = osutils.basename(self._target_subdir)1854 name_in_target = osutils.basename(self._target_subdir)
1855 merge_into_root = subdir.copy()1855 merge_into_root = subdir.copy()
1856 merge_into_root.name = name_in_target1856 merge_into_root.name = name_in_target
1857 if self.this_tree.has_id(merge_into_root.file_id):1857 try:
1858 self.this_tree.id2path(merge_into_root.file_id)
1859 except errors.NoSuchId:
1860 pass
1861 else:
1858 # Give the root a new file-id.1862 # Give the root a new file-id.
1859 # This can happen fairly easily if the directory we are1863 # This can happen fairly easily if the directory we are
1860 # incorporating is the root, and both trees have 'TREE_ROOT' as1864 # incorporating is the root, and both trees have 'TREE_ROOT' as
18611865
=== modified file 'breezy/tests/blackbox/test_join.py'
--- breezy/tests/blackbox/test_join.py 2019-09-22 12:47:23 +0000
+++ breezy/tests/blackbox/test_join.py 2019-10-13 15:35:30 +0000
@@ -73,7 +73,7 @@
73 self.addCleanup(sub_tree.unlock)73 self.addCleanup(sub_tree.unlock)
74 if sub_tree.supports_setting_file_ids():74 if sub_tree.supports_setting_file_ids():
75 self.assertEqual(b'file1-id', sub_tree.path2id('file1'))75 self.assertEqual(b'file1-id', sub_tree.path2id('file1'))
76 self.assertTrue(sub_tree.has_id(b'file1-id'))76 self.assertEqual('file1', sub_tree.id2path(b'file1-id'))
77 self.assertEqual(subtree_root_id, sub_tree.path2id(''))77 self.assertEqual(subtree_root_id, sub_tree.path2id(''))
78 self.assertEqual('', sub_tree.id2path(subtree_root_id))78 self.assertEqual('', sub_tree.id2path(subtree_root_id))
79 self.assertIs(None, base_tree.path2id('subtree/file1'))79 self.assertIs(None, base_tree.path2id('subtree/file1'))
@@ -83,7 +83,7 @@
83 self.assertEqual(['subtree'], list(base_tree.iter_references()))83 self.assertEqual(['subtree'], list(base_tree.iter_references()))
84 if base_tree.supports_setting_file_ids():84 if base_tree.supports_setting_file_ids():
85 self.assertEqual(b'file1-id', sub_tree.path2id('file1'))85 self.assertEqual(b'file1-id', sub_tree.path2id('file1'))
86 self.assertFalse(base_tree.has_id(b'file1-id'))86 self.assertEqual('file1', sub_tree.id2path(b'file1-id'))
87 self.assertEqual(subtree_root_id, base_tree.path2id('subtree'))87 self.assertEqual(subtree_root_id, base_tree.path2id('subtree'))
88 self.assertEqual('subtree', base_tree.id2path(subtree_root_id))88 self.assertEqual('subtree', base_tree.id2path(subtree_root_id))
8989
9090
=== modified file 'breezy/tests/per_tree/test_tree.py'
--- breezy/tests/per_tree/test_tree.py 2019-09-22 12:47:23 +0000
+++ breezy/tests/per_tree/test_tree.py 2019-10-13 15:35:30 +0000
@@ -295,20 +295,6 @@
295 list(tree.iter_child_entries('unknown')))295 list(tree.iter_child_entries('unknown')))
296296
297297
298class TestHasId(TestCaseWithTree):
299
300 def test_has_id(self):
301 work_tree = self.make_branch_and_tree('tree')
302 self.build_tree(['tree/file'])
303 work_tree.add('file')
304 file_id = work_tree.path2id('file')
305 tree = self._convert_tree(work_tree)
306 tree.lock_read()
307 self.addCleanup(tree.unlock)
308 self.assertTrue(tree.has_id(file_id))
309 self.assertFalse(tree.has_id(b'dir-id'))
310
311
312class TestExtras(TestCaseWithTree):298class TestExtras(TestCaseWithTree):
313299
314 def test_extras(self):300 def test_extras(self):
315301
=== modified file 'breezy/tests/per_workingtree/test_commit.py'
--- breezy/tests/per_workingtree/test_commit.py 2019-09-25 19:11:10 +0000
+++ breezy/tests/per_workingtree/test_commit.py 2019-10-13 15:35:30 +0000
@@ -312,10 +312,6 @@
312 # a present on disk. After commit b-id, c-id and d-id should be312 # a present on disk. After commit b-id, c-id and d-id should be
313 # missing from the inventory, within the same tree transaction.313 # missing from the inventory, within the same tree transaction.
314 wt.commit('commit stuff')314 wt.commit('commit stuff')
315 self.assertTrue(wt.has_id(a_id))
316 self.assertFalse(wt.has_id(b_id))
317 self.assertFalse(wt.has_id(c_id))
318 self.assertFalse(wt.has_id(d_id))
319 self.assertTrue(wt.has_filename('a'))315 self.assertTrue(wt.has_filename('a'))
320 self.assertFalse(wt.has_filename('b'))316 self.assertFalse(wt.has_filename('b'))
321 self.assertFalse(wt.has_filename('b/c'))317 self.assertFalse(wt.has_filename('b/c'))
@@ -324,16 +320,11 @@
324 # the changes should have persisted to disk - reopen the workingtree320 # the changes should have persisted to disk - reopen the workingtree
325 # to be sure.321 # to be sure.
326 wt = wt.controldir.open_workingtree()322 wt = wt.controldir.open_workingtree()
327 wt.lock_read()323 with wt.lock_read():
328 self.assertTrue(wt.has_id(a_id))324 self.assertTrue(wt.has_filename('a'))
329 self.assertFalse(wt.has_id(b_id))325 self.assertFalse(wt.has_filename('b'))
330 self.assertFalse(wt.has_id(c_id))326 self.assertFalse(wt.has_filename('b/c'))
331 self.assertFalse(wt.has_id(d_id))327 self.assertFalse(wt.has_filename('d'))
332 self.assertTrue(wt.has_filename('a'))
333 self.assertFalse(wt.has_filename('b'))
334 self.assertFalse(wt.has_filename('b/c'))
335 self.assertFalse(wt.has_filename('d'))
336 wt.unlock()
337328
338 def test_commit_deleted_subtree_with_removed(self):329 def test_commit_deleted_subtree_with_removed(self):
339 wt = self.make_branch_and_tree('.')330 wt = self.make_branch_and_tree('.')
@@ -346,15 +337,12 @@
346 wt.remove('b/c')337 wt.remove('b/c')
347 this_dir = wt.controldir.root_transport338 this_dir = wt.controldir.root_transport
348 this_dir.delete_tree('b')339 this_dir.delete_tree('b')
349 wt.lock_write()340 with wt.lock_write():
350 wt.commit('commit deleted rename')341 wt.commit('commit deleted rename')
351 self.assertTrue(wt.is_versioned('a'))342 self.assertTrue(wt.is_versioned('a'))
352 self.assertFalse(wt.has_id(b_id))343 self.assertTrue(wt.has_filename('a'))
353 self.assertFalse(wt.has_id(c_id))344 self.assertFalse(wt.has_filename('b'))
354 self.assertTrue(wt.has_filename('a'))345 self.assertFalse(wt.has_filename('b/c'))
355 self.assertFalse(wt.has_filename('b'))
356 self.assertFalse(wt.has_filename('b/c'))
357 wt.unlock()
358346
359 def test_commit_move_new(self):347 def test_commit_move_new(self):
360 wt = self.make_branch_and_tree('first')348 wt = self.make_branch_and_tree('first')
361349
=== modified file 'breezy/tests/per_workingtree/test_executable.py'
--- breezy/tests/per_workingtree/test_executable.py 2019-06-17 23:01:58 +0000
+++ breezy/tests/per_workingtree/test_executable.py 2019-10-13 15:35:30 +0000
@@ -52,16 +52,13 @@
52 the inventory still shows them, so don't assert that52 the inventory still shows them, so don't assert that
53 the inventory is empty, just that the tree doesn't have them53 the inventory is empty, just that the tree doesn't have them
54 """54 """
55 tree.lock_read()55 with tree.lock_read():
56 if not ignore_inv and getattr(tree, 'root_inventory', None):56 if not ignore_inv and getattr(tree, 'root_inventory', None):
57 self.assertEqual(57 self.assertEqual(
58 [('', tree.root_inventory.root)],58 [('', tree.root_inventory.root)],
59 list(tree.root_inventory.iter_entries()))59 list(tree.root_inventory.iter_entries()))
60 self.assertFalse(tree.has_id(self.a_id))60 self.assertFalse(tree.has_filename('a'))
61 self.assertFalse(tree.has_filename('a'))61 self.assertFalse(tree.has_filename('b'))
62 self.assertFalse(tree.has_id(self.b_id))
63 self.assertFalse(tree.has_filename('b'))
64 tree.unlock()
6562
66 def commit_and_branch(self):63 def commit_and_branch(self):
67 """Commit the current tree, and create a second tree"""64 """Commit the current tree, and create a second tree"""
6865
=== modified file 'breezy/tests/test_bundle.py'
--- breezy/tests/test_bundle.py 2019-08-11 13:33:45 +0000
+++ breezy/tests/test_bundle.py 2019-10-13 15:35:30 +0000
@@ -148,10 +148,10 @@
148 return self.ids.get(path)148 return self.ids.get(path)
149149
150 def id2path(self, file_id):150 def id2path(self, file_id):
151 return self.paths.get(file_id)151 try:
152152 return self.paths[file_id]
153 def has_id(self, file_id):153 except KeyError:
154 return self.id2path(file_id) is not None154 raise errors.NoSuchId(file_id, self)
155155
156 def get_file(self, path):156 def get_file(self, path):
157 result = BytesIO()157 result = BytesIO()
@@ -270,7 +270,7 @@
270 btree = self.make_tree_1()[0]270 btree = self.make_tree_1()[0]
271 btree.note_rename("grandparent/parent/file",271 btree.note_rename("grandparent/parent/file",
272 "grandparent/alt_parent/file")272 "grandparent/alt_parent/file")
273 self.assertTrue(btree.id2path(b"e") is None)273 self.assertRaises(errors.NoSuchId, btree.id2path, b"e")
274 self.assertFalse(btree.is_versioned("grandparent/parent/file"))274 self.assertFalse(btree.is_versioned("grandparent/parent/file"))
275 btree.note_id(b"e", "grandparent/parent/file")275 btree.note_id(b"e", "grandparent/parent/file")
276 return btree276 return btree
@@ -292,16 +292,6 @@
292 self.assertEqual(292 self.assertEqual(
293 btree.get_symlink_target('grandparent/parent/symlink'), 'venus')293 btree.get_symlink_target('grandparent/parent/symlink'), 'venus')
294294
295 def test_adds2(self):
296 """File/inventory adds, with patch-compatibile renames"""
297 btree = self.make_tree_2()
298 btree.contents_by_id = False
299 add_patch = self.unified_diff([b"Hello\n"], [b"Extra cheese\n"])
300 btree.note_patch("grandparent/parent/file", add_patch)
301 btree.note_id(b'f', 'grandparent/parent/symlink', kind='symlink')
302 btree.note_target('grandparent/parent/symlink', 'venus')
303 self.adds_test(btree)
304
305 def make_tree_3(self):295 def make_tree_3(self):
306 btree, mtree = self.make_tree_1()296 btree, mtree = self.make_tree_1()
307 mtree.add_file(b"e", "grandparent/parent/topping", b"Anchovies\n")297 mtree.add_file(b"e", "grandparent/parent/topping", b"Anchovies\n")
@@ -324,23 +314,13 @@
324 btree.note_patch("grandparent/alt_parent/stopping", mod_patch)314 btree.note_patch("grandparent/alt_parent/stopping", mod_patch)
325 self.get_file_test(btree)315 self.get_file_test(btree)
326316
327 def test_get_file2(self):
328 """Get file contents, with patch-compatible renames"""
329 btree = self.make_tree_3()
330 btree.contents_by_id = False
331 mod_patch = self.unified_diff([], [b"Lemon\n"])
332 btree.note_patch("grandparent/alt_parent/stopping", mod_patch)
333 mod_patch = self.unified_diff([], [b"Hello\n"])
334 btree.note_patch("grandparent/alt_parent/file", mod_patch)
335 self.get_file_test(btree)
336
337 def test_delete(self):317 def test_delete(self):
338 "Deletion by bundle"318 "Deletion by bundle"
339 btree = self.make_tree_1()[0]319 btree = self.make_tree_1()[0]
340 with btree.get_file(btree.id2path(b"c")) as f:320 with btree.get_file(btree.id2path(b"c")) as f:
341 self.assertEqual(f.read(), b"Hello\n")321 self.assertEqual(f.read(), b"Hello\n")
342 btree.note_deletion("grandparent/parent/file")322 btree.note_deletion("grandparent/parent/file")
343 self.assertTrue(btree.id2path(b"c") is None)323 self.assertRaises(errors.NoSuchId, btree.id2path, b"c")
344 self.assertFalse(btree.is_versioned("grandparent/parent/file"))324 self.assertFalse(btree.is_versioned("grandparent/parent/file"))
345325
346 def sorted_ids(self, tree):326 def sorted_ids(self, tree):
347327
=== modified file 'breezy/tests/test_commit.py'
--- breezy/tests/test_commit.py 2019-06-15 15:59:17 +0000
+++ breezy/tests/test_commit.py 2019-10-13 15:35:30 +0000
@@ -173,7 +173,7 @@
173 reporter.calls)173 reporter.calls)
174174
175 tree = b.repository.revision_tree(b'rev2')175 tree = b.repository.revision_tree(b'rev2')
176 self.assertFalse(tree.has_id(b'hello-id'))176 self.assertFalse(tree.has_filename('hello'))
177177
178 def test_partial_commit_move(self):178 def test_partial_commit_move(self):
179 """Test a partial commit where a file was renamed but not committed.179 """Test a partial commit where a file was renamed but not committed.
@@ -361,7 +361,7 @@
361 wt.commit('removed hello', rev_id=b'rev2')361 wt.commit('removed hello', rev_id=b'rev2')
362362
363 tree = b.repository.revision_tree(b'rev2')363 tree = b.repository.revision_tree(b'rev2')
364 self.assertFalse(tree.has_id(b'hello-id'))364 self.assertFalse(tree.has_filename('hello'))
365365
366 def test_committed_ancestry(self):366 def test_committed_ancestry(self):
367 """Test commit appends revisions to ancestry."""367 """Test commit appends revisions to ancestry."""
368368
=== modified file 'breezy/tests/test_memorytree.py'
--- breezy/tests/test_memorytree.py 2019-06-29 13:16:26 +0000
+++ breezy/tests/test_memorytree.py 2019-10-13 15:35:30 +0000
@@ -170,7 +170,7 @@
170 kinds=['directory', 'file'])170 kinds=['directory', 'file'])
171 tree.unversion(['foo'])171 tree.unversion(['foo'])
172 self.assertFalse(tree.is_versioned('foo'))172 self.assertFalse(tree.is_versioned('foo'))
173 self.assertFalse(tree.has_id(b'foo-id'))173 self.assertRaises(errors.NoSuchId, tree.id2path, b'foo-id')
174174
175 def test_last_revision(self):175 def test_last_revision(self):
176 """There should be a last revision method we can call."""176 """There should be a last revision method we can call."""
177177
=== modified file 'breezy/tests/test_shelf.py'
--- breezy/tests/test_shelf.py 2018-11-16 18:33:17 +0000
+++ breezy/tests/test_shelf.py 2019-10-13 15:35:30 +0000
@@ -381,8 +381,8 @@
381 return creator, tree381 return creator, tree
382382
383 def check_shelve_deletion(self, tree):383 def check_shelve_deletion(self, tree):
384 self.assertTrue(tree.has_id(b'foo-id'))384 self.assertEqual(tree.id2path(b'foo-id'), 'foo')
385 self.assertTrue(tree.has_id(b'bar-id'))385 self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar')
386 self.assertFileEqual(b'baz', 'tree/foo/bar')386 self.assertFileEqual(b'baz', 'tree/foo/bar')
387387
388 def test_shelve_deletion(self):388 def test_shelve_deletion(self):
@@ -611,15 +611,15 @@
611 creator.transform()611 creator.transform()
612 creator.finalize()612 creator.finalize()
613 # validate the test setup613 # validate the test setup
614 self.assertTrue(tree.has_id(b'foo-id'))614 self.assertEqual(tree.id2path(b'foo-id'), 'foo')
615 self.assertTrue(tree.has_id(b'bar-id'))615 self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar')
616 self.assertFileEqual(b'baz', 'tree/foo/bar')616 self.assertFileEqual(b'baz', 'tree/foo/bar')
617 with open('shelf', 'r+b') as shelf_file:617 with open('shelf', 'r+b') as shelf_file:
618 unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)618 unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
619 self.addCleanup(unshelver.finalize)619 self.addCleanup(unshelver.finalize)
620 unshelver.make_merger().do_merge()620 unshelver.make_merger().do_merge()
621 self.assertFalse(tree.has_id(b'foo-id'))621 self.assertRaises(errors.NoSuchId, tree.id2path, b'foo-id')
622 self.assertFalse(tree.has_id(b'bar-id'))622 self.assertRaises(errors.NoSuchId, tree.id2path, b'bar-id')
623623
624 def test_unshelve_base(self):624 def test_unshelve_base(self):
625 tree = self.make_branch_and_tree('tree')625 tree = self.make_branch_and_tree('tree')
626626
=== modified file 'breezy/tests/test_smart_add.py'
--- breezy/tests/test_smart_add.py 2019-06-29 13:16:26 +0000
+++ breezy/tests/test_smart_add.py 2019-10-13 15:35:30 +0000
@@ -17,6 +17,7 @@
17from .. import (17from .. import (
18 add,18 add,
19 cache_utf8,19 cache_utf8,
20 errors,
20 tests,21 tests,
21 )22 )
22from ..bzr import (23from ..bzr import (
@@ -116,11 +117,11 @@
116 self.assertNotEqual(None, c_id)117 self.assertNotEqual(None, c_id)
117 self.base_tree.lock_read()118 self.base_tree.lock_read()
118 self.addCleanup(self.base_tree.unlock)119 self.addCleanup(self.base_tree.unlock)
119 self.assertFalse(self.base_tree.has_id(c_id))120 self.assertRaises(errors.NoSuchId, self.base_tree.id2path, c_id)
120121
121 d_id = new_tree.path2id('subdir/d')122 d_id = new_tree.path2id('subdir/d')
122 self.assertNotEqual(None, d_id)123 self.assertNotEqual(None, d_id)
123 self.assertFalse(self.base_tree.has_id(d_id))124 self.assertRaises(errors.NoSuchId, self.base_tree.id2path, d_id)
124125
125 def test_copy_existing_dir(self):126 def test_copy_existing_dir(self):
126 self.make_base_tree()127 self.make_base_tree()
@@ -141,7 +142,7 @@
141 self.assertNotEqual(None, a_id)142 self.assertNotEqual(None, a_id)
142 self.base_tree.lock_read()143 self.base_tree.lock_read()
143 self.addCleanup(self.base_tree.unlock)144 self.addCleanup(self.base_tree.unlock)
144 self.assertFalse(self.base_tree.has_id(a_id))145 self.assertRaises(errors.NoSuchId, self.base_tree.id2path, a_id)
145146
146147
147class TestAddActions(tests.TestCase):148class TestAddActions(tests.TestCase):
148149
=== modified file 'breezy/transform.py'
--- breezy/transform.py 2019-09-25 19:11:10 +0000
+++ breezy/transform.py 2019-10-13 15:35:30 +0000
@@ -2121,18 +2121,6 @@
21212121
2122 return tree_paths2122 return tree_paths
21232123
2124 def _has_id(self, file_id, fallback_check):
2125 if file_id in self._transform._r_new_id:
2126 return True
2127 elif file_id in {self._transform.tree_file_id(trans_id) for
2128 trans_id in self._transform._removed_id}:
2129 return False
2130 else:
2131 return fallback_check(file_id)
2132
2133 def has_id(self, file_id):
2134 return self._has_id(file_id, self._transform._tree.has_id)
2135
2136 def _path2trans_id(self, path):2124 def _path2trans_id(self, path):
2137 # We must not use None here, because that is a valid value to store.2125 # We must not use None here, because that is a valid value to store.
2138 trans_id = self._path2trans_id_cache.get(path, object)2126 trans_id = self._path2trans_id_cache.get(path, object)
@@ -2180,11 +2168,6 @@
2180 self._all_children_cache[trans_id] = children2168 self._all_children_cache[trans_id] = children
2181 return children2169 return children
21822170
2183 def _iter_children(self, file_id):
2184 trans_id = self._transform.trans_id_file_id(file_id)
2185 for child_trans_id in self._all_children(trans_id):
2186 yield self._transform.final_file_id(child_trans_id)
2187
2188 def extras(self):2171 def extras(self):
2189 possible_extras = set(self._transform.trans_id_tree_path(p) for p2172 possible_extras = set(self._transform.trans_id_tree_path(p) for p
2190 in self._transform._tree.extras())2173 in self._transform._tree.extras())
@@ -2561,13 +2544,6 @@
2561 return [(self.get_path(t), t) for t in trans_ids]2544 return [(self.get_path(t), t) for t in trans_ids]
25622545
25632546
2564def topology_sorted_ids(tree):
2565 """Determine the topological order of the ids in a tree"""
2566 file_ids = list(tree)
2567 file_ids.sort(key=tree.id2path)
2568 return file_ids
2569
2570
2571def build_tree(tree, wt, accelerator_tree=None, hardlink=False,2547def build_tree(tree, wt, accelerator_tree=None, hardlink=False,
2572 delta_from_tree=False):2548 delta_from_tree=False):
2573 """Create working tree for a branch, using a TreeTransform.2549 """Create working tree for a branch, using a TreeTransform.

Subscribers

People subscribed via source and target branches