Merge lp:~jelmer/brz/remove-unused into lp:brz
- remove-unused
- Merge into trunk
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 |
Related bugs: |
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.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'breezy/builtins.py' | |||
2 | --- breezy/builtins.py 2019-08-11 13:33:45 +0000 | |||
3 | +++ breezy/builtins.py 2019-10-13 15:35:30 +0000 | |||
4 | @@ -2386,13 +2386,13 @@ | |||
5 | 2386 | self.enter_context(tree.lock_read()) | 2386 | self.enter_context(tree.lock_read()) |
6 | 2387 | old = tree.basis_tree() | 2387 | old = tree.basis_tree() |
7 | 2388 | self.enter_context(old.lock_read()) | 2388 | self.enter_context(old.lock_read()) |
15 | 2389 | for path, ie in old.iter_entries_by_dir(): | 2389 | delta = tree.changes_from(old) |
16 | 2390 | if not tree.has_id(ie.file_id): | 2390 | for change in delta.removed: |
17 | 2391 | self.outf.write(path) | 2391 | self.outf.write(change.path[0]) |
18 | 2392 | if show_ids: | 2392 | if show_ids: |
19 | 2393 | self.outf.write(' ') | 2393 | self.outf.write(' ') |
20 | 2394 | self.outf.write(ie.file_id) | 2394 | self.outf.write(change.file_id) |
21 | 2395 | self.outf.write('\n') | 2395 | self.outf.write('\n') |
22 | 2396 | 2396 | ||
23 | 2397 | 2397 | ||
24 | 2398 | class cmd_modified(Command): | 2398 | class cmd_modified(Command): |
25 | 2399 | 2399 | ||
26 | === modified file 'breezy/bzr/bundle/bundle_data.py' | |||
27 | --- breezy/bzr/bundle/bundle_data.py 2019-09-21 15:10:27 +0000 | |||
28 | +++ breezy/bzr/bundle/bundle_data.py 2019-10-13 15:35:30 +0000 | |||
29 | @@ -32,6 +32,7 @@ | |||
30 | 32 | from ...errors import ( | 32 | from ...errors import ( |
31 | 33 | TestamentMismatch, | 33 | TestamentMismatch, |
32 | 34 | BzrError, | 34 | BzrError, |
33 | 35 | NoSuchId, | ||
34 | 35 | ) | 36 | ) |
35 | 36 | from ..inventory import ( | 37 | from ..inventory import ( |
36 | 37 | Inventory, | 38 | Inventory, |
37 | @@ -486,7 +487,6 @@ | |||
38 | 486 | self.patches = {} | 487 | self.patches = {} |
39 | 487 | self._targets = {} # new path => new symlink target | 488 | self._targets = {} # new path => new symlink target |
40 | 488 | self.deleted = [] | 489 | self.deleted = [] |
41 | 489 | self.contents_by_id = True | ||
42 | 490 | self.revision_id = revision_id | 490 | self.revision_id = revision_id |
43 | 491 | self._inventory = None | 491 | self._inventory = None |
44 | 492 | 492 | ||
45 | @@ -602,22 +602,13 @@ | |||
46 | 602 | return path | 602 | return path |
47 | 603 | old_path = self.base_tree.id2path(file_id) | 603 | old_path = self.base_tree.id2path(file_id) |
48 | 604 | if old_path is None: | 604 | if old_path is None: |
50 | 605 | return None | 605 | raise NoSuchId(file_id, self) |
51 | 606 | if old_path in self.deleted: | 606 | if old_path in self.deleted: |
66 | 607 | return None | 607 | raise NoSuchId(file_id, self) |
67 | 608 | return self.new_path(old_path) | 608 | new_path = self.new_path(old_path) |
68 | 609 | 609 | if new_path is None: | |
69 | 610 | def old_contents_id(self, file_id): | 610 | raise NoSuchId(file_id, self) |
70 | 611 | """Return the id in the base_tree for the given file_id. | 611 | return new_path |
57 | 612 | Return None if the file did not exist in base. | ||
58 | 613 | """ | ||
59 | 614 | if self.contents_by_id: | ||
60 | 615 | if self.base_tree.has_id(file_id): | ||
61 | 616 | return file_id | ||
62 | 617 | else: | ||
63 | 618 | return None | ||
64 | 619 | new_path = self.id2path(file_id) | ||
65 | 620 | return self.base_tree.path2id(new_path) | ||
71 | 621 | 612 | ||
72 | 622 | def get_file(self, path): | 613 | def get_file(self, path): |
73 | 623 | """Return a file-like object containing the new contents of the | 614 | """Return a file-like object containing the new contents of the |
74 | @@ -628,13 +619,14 @@ | |||
75 | 628 | then be cached. | 619 | then be cached. |
76 | 629 | """ | 620 | """ |
77 | 630 | file_id = self.path2id(path) | 621 | file_id = self.path2id(path) |
82 | 631 | base_id = self.old_contents_id(file_id) | 622 | try: |
83 | 632 | if (base_id is not None and | 623 | old_path = self.base_tree.id2path(file_id) |
84 | 633 | base_id != self.base_tree.path2id('')): | 624 | except NoSuchId: |
85 | 634 | old_path = self.base_tree.id2path(base_id) | 625 | patch_original = None |
86 | 626 | else: | ||
87 | 627 | if old_path is None: | ||
88 | 628 | import pdb; pdb.set_trace() | ||
89 | 635 | patch_original = self.base_tree.get_file(old_path) | 629 | patch_original = self.base_tree.get_file(old_path) |
90 | 636 | else: | ||
91 | 637 | patch_original = None | ||
92 | 638 | file_patch = self.patches.get(path) | 630 | file_patch = self.patches.get(path) |
93 | 639 | if file_patch is None: | 631 | if file_patch is None: |
94 | 640 | if (patch_original is None and | 632 | if (patch_original is None and |
95 | @@ -780,8 +772,9 @@ | |||
96 | 780 | for result in viewitems(self._new_id): | 772 | for result in viewitems(self._new_id): |
97 | 781 | paths.append(result) | 773 | paths.append(result) |
98 | 782 | for id in self.base_tree.all_file_ids(): | 774 | for id in self.base_tree.all_file_ids(): |
101 | 783 | path = self.id2path(id) | 775 | try: |
102 | 784 | if path is None: | 776 | path = self.id2path(id) |
103 | 777 | except NoSuchId: | ||
104 | 785 | continue | 778 | continue |
105 | 786 | paths.append((path, id)) | 779 | paths.append((path, id)) |
106 | 787 | paths.sort() | 780 | paths.sort() |
107 | 788 | 781 | ||
108 | === modified file 'breezy/bzr/bundle/serializer/v08.py' | |||
109 | --- breezy/bzr/bundle/serializer/v08.py 2019-09-21 19:27:04 +0000 | |||
110 | +++ breezy/bzr/bundle/serializer/v08.py 2019-10-13 15:35:30 +0000 | |||
111 | @@ -269,13 +269,14 @@ | |||
112 | 269 | 269 | ||
113 | 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): |
114 | 271 | def tree_lines(tree, path, require_text=False): | 271 | def tree_lines(tree, path, require_text=False): |
116 | 272 | if tree.has_id(file_id): | 272 | try: |
117 | 273 | tree_file = tree.get_file(path) | 273 | tree_file = tree.get_file(path) |
118 | 274 | except errors.NoSuchFile: | ||
119 | 275 | return [] | ||
120 | 276 | else: | ||
121 | 274 | if require_text is True: | 277 | if require_text is True: |
122 | 275 | tree_file = text_file(tree_file) | 278 | tree_file = text_file(tree_file) |
123 | 276 | return tree_file.readlines() | 279 | return tree_file.readlines() |
124 | 277 | else: | ||
125 | 278 | return [] | ||
126 | 279 | 280 | ||
127 | 280 | try: | 281 | try: |
128 | 281 | if force_binary: | 282 | if force_binary: |
129 | 282 | 283 | ||
130 | === modified file 'breezy/bzr/inventorytree.py' | |||
131 | --- breezy/bzr/inventorytree.py 2019-09-25 19:11:10 +0000 | |||
132 | +++ breezy/bzr/inventorytree.py 2019-10-13 15:35:30 +0000 | |||
133 | @@ -172,10 +172,6 @@ | |||
134 | 172 | inventory, file_id = self._unpack_file_id(file_id) | 172 | inventory, file_id = self._unpack_file_id(file_id) |
135 | 173 | return inventory.id2path(file_id) | 173 | return inventory.id2path(file_id) |
136 | 174 | 174 | ||
137 | 175 | def has_id(self, file_id): | ||
138 | 176 | inventory, file_id = self._unpack_file_id(file_id) | ||
139 | 177 | return inventory.has_id(file_id) | ||
140 | 178 | |||
141 | 179 | def all_file_ids(self): | 175 | def all_file_ids(self): |
142 | 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()} |
143 | 181 | 177 | ||
144 | 182 | 178 | ||
145 | === modified file 'breezy/bzr/vf_repository.py' | |||
146 | --- breezy/bzr/vf_repository.py 2019-07-25 23:22:30 +0000 | |||
147 | +++ breezy/bzr/vf_repository.py 2019-10-13 15:35:30 +0000 | |||
148 | @@ -2916,9 +2916,10 @@ | |||
149 | 2916 | # the parents inserted are not those commit would do - in particular | 2916 | # the parents inserted are not those commit would do - in particular |
150 | 2917 | # they are not filtered by heads(). RBC, AB | 2917 | # they are not filtered by heads(). RBC, AB |
151 | 2918 | for revision, tree in viewitems(parent_trees): | 2918 | for revision, tree in viewitems(parent_trees): |
153 | 2919 | if not tree.has_id(ie.file_id): | 2919 | try: |
154 | 2920 | path = tree.id2path(ie.file_id) | ||
155 | 2921 | except errors.NoSuchId: | ||
156 | 2920 | continue | 2922 | continue |
157 | 2921 | path = tree.id2path(ie.file_id) | ||
158 | 2922 | parent_id = tree.get_file_revision(path) | 2923 | parent_id = tree.get_file_revision(path) |
159 | 2923 | if parent_id in text_parents: | 2924 | if parent_id in text_parents: |
160 | 2924 | continue | 2925 | continue |
161 | 2925 | 2926 | ||
162 | === modified file 'breezy/bzr/workingtree.py' | |||
163 | --- breezy/bzr/workingtree.py 2019-09-25 19:11:10 +0000 | |||
164 | +++ breezy/bzr/workingtree.py 2019-10-13 15:35:30 +0000 | |||
165 | @@ -658,14 +658,6 @@ | |||
166 | 658 | self._set_inventory(result, dirty=False) | 658 | self._set_inventory(result, dirty=False) |
167 | 659 | return result | 659 | return result |
168 | 660 | 660 | ||
169 | 661 | def has_id(self, file_id): | ||
170 | 662 | # files that have been deleted are excluded | ||
171 | 663 | inv, inv_file_id = self._unpack_file_id(file_id) | ||
172 | 664 | if not inv.has_id(inv_file_id): | ||
173 | 665 | return False | ||
174 | 666 | path = inv.id2path(inv_file_id) | ||
175 | 667 | return osutils.lexists(self.abspath(path)) | ||
176 | 668 | |||
177 | 669 | def all_file_ids(self): | 661 | def all_file_ids(self): |
178 | 670 | """Iterate through file_ids for this tree. | 662 | """Iterate through file_ids for this tree. |
179 | 671 | 663 | ||
180 | @@ -1368,7 +1360,9 @@ | |||
181 | 1368 | if after: | 1360 | if after: |
182 | 1369 | basis = self.basis_tree() | 1361 | basis = self.basis_tree() |
183 | 1370 | with basis.lock_read(): | 1362 | with basis.lock_read(): |
185 | 1371 | if not basis.has_id(to_id): | 1363 | try: |
186 | 1364 | basis.id2path(to_id) | ||
187 | 1365 | except errors.NoSuchId: | ||
188 | 1372 | rename_entry.change_id = True | 1366 | rename_entry.change_id = True |
189 | 1373 | allowed = True | 1367 | allowed = True |
190 | 1374 | if not allowed: | 1368 | if not allowed: |
191 | 1375 | 1369 | ||
192 | === modified file 'breezy/bzr/workingtree_4.py' | |||
193 | --- breezy/bzr/workingtree_4.py 2019-09-25 19:11:10 +0000 | |||
194 | +++ breezy/bzr/workingtree_4.py 2019-10-13 15:35:30 +0000 | |||
195 | @@ -175,9 +175,13 @@ | |||
196 | 175 | if sub_tree_id == self.path2id(''): | 175 | if sub_tree_id == self.path2id(''): |
197 | 176 | raise BadReferenceTarget(self, sub_tree, | 176 | raise BadReferenceTarget(self, sub_tree, |
198 | 177 | 'Trees have the same root id.') | 177 | 'Trees have the same root id.') |
202 | 178 | if self.has_id(sub_tree_id): | 178 | try: |
203 | 179 | raise BadReferenceTarget(self, sub_tree, | 179 | self.id2path(sub_tree_id) |
204 | 180 | 'Root id already present in tree') | 180 | except errors.NoSuchId: |
205 | 181 | pass | ||
206 | 182 | else: | ||
207 | 183 | raise BadReferenceTarget( | ||
208 | 184 | self, sub_tree, 'Root id already present in tree') | ||
209 | 181 | self._add([sub_tree_path], [sub_tree_id], ['tree-reference']) | 185 | self._add([sub_tree_path], [sub_tree_id], ['tree-reference']) |
210 | 182 | 186 | ||
211 | 183 | def break_lock(self): | 187 | def break_lock(self): |
212 | @@ -467,14 +471,6 @@ | |||
213 | 467 | def get_nested_tree(self, path): | 471 | def get_nested_tree(self, path): |
214 | 468 | return WorkingTree.open(self.abspath(path)) | 472 | return WorkingTree.open(self.abspath(path)) |
215 | 469 | 473 | ||
216 | 470 | def has_id(self, file_id): | ||
217 | 471 | state = self.current_dirstate() | ||
218 | 472 | row, parents = self._get_entry(file_id=file_id) | ||
219 | 473 | if row is None: | ||
220 | 474 | return False | ||
221 | 475 | return osutils.lexists(pathjoin( | ||
222 | 476 | self.basedir, row[0].decode('utf8'), row[1].decode('utf8'))) | ||
223 | 477 | |||
224 | 478 | def id2path(self, file_id): | 474 | def id2path(self, file_id): |
225 | 479 | "Convert a file-id to a path." | 475 | "Convert a file-id to a path." |
226 | 480 | with self.lock_read(): | 476 | with self.lock_read(): |
227 | 481 | 477 | ||
228 | === modified file 'breezy/git/tests/test_memorytree.py' | |||
229 | --- breezy/git/tests/test_memorytree.py 2018-11-11 04:08:32 +0000 | |||
230 | +++ breezy/git/tests/test_memorytree.py 2019-10-13 15:35:30 +0000 | |||
231 | @@ -142,19 +142,18 @@ | |||
232 | 142 | """Some test for unversion of a memory tree.""" | 142 | """Some test for unversion of a memory tree.""" |
233 | 143 | branch = self.make_branch('branch') | 143 | branch = self.make_branch('branch') |
234 | 144 | tree = branch.create_memorytree() | 144 | tree = branch.create_memorytree() |
240 | 145 | tree.lock_write() | 145 | with tree.lock_write(): |
241 | 146 | tree.add(['', 'foo'], kinds=['directory', 'file']) | 146 | tree.add(['', 'foo'], kinds=['directory', 'file']) |
242 | 147 | tree.unversion(['foo']) | 147 | tree.unversion(['foo']) |
243 | 148 | self.assertFalse(tree.has_id(b'foo-id')) | 148 | self.assertFalse(tree.is_versioned('foo')) |
244 | 149 | tree.unlock() | 149 | self.assertFalse(tree.has_filename('foo')) |
245 | 150 | 150 | ||
246 | 151 | def test_last_revision(self): | 151 | def test_last_revision(self): |
247 | 152 | """There should be a last revision method we can call.""" | 152 | """There should be a last revision method we can call.""" |
248 | 153 | tree = self.make_branch_and_memory_tree('branch') | 153 | tree = self.make_branch_and_memory_tree('branch') |
253 | 154 | tree.lock_write() | 154 | with tree.lock_write(): |
254 | 155 | tree.add('') | 155 | tree.add('') |
255 | 156 | rev_id = tree.commit('first post') | 156 | rev_id = tree.commit('first post') |
252 | 157 | tree.unlock() | ||
256 | 158 | self.assertEqual(rev_id, tree.last_revision()) | 157 | self.assertEqual(rev_id, tree.last_revision()) |
257 | 159 | 158 | ||
258 | 160 | def test_rename_file(self): | 159 | def test_rename_file(self): |
259 | 161 | 160 | ||
260 | === modified file 'breezy/git/tree.py' | |||
261 | --- breezy/git/tree.py 2019-09-25 19:11:10 +0000 | |||
262 | +++ breezy/git/tree.py 2019-10-13 15:35:30 +0000 | |||
263 | @@ -360,13 +360,6 @@ | |||
264 | 360 | todo.append((store, subpath, hexsha)) | 360 | todo.append((store, subpath, hexsha)) |
265 | 361 | return ret | 361 | return ret |
266 | 362 | 362 | ||
267 | 363 | def has_id(self, file_id): | ||
268 | 364 | try: | ||
269 | 365 | path = self.id2path(file_id) | ||
270 | 366 | except errors.NoSuchId: | ||
271 | 367 | return False | ||
272 | 368 | return self.has_filename(path) | ||
273 | 369 | |||
274 | 370 | def _lookup_path(self, path): | 363 | def _lookup_path(self, path): |
275 | 371 | if self.tree is None: | 364 | if self.tree is None: |
276 | 372 | raise errors.NoSuchFile(path) | 365 | raise errors.NoSuchFile(path) |
277 | @@ -1024,14 +1017,6 @@ | |||
278 | 1024 | osutils.safe_unicode(path)) | 1017 | osutils.safe_unicode(path)) |
279 | 1025 | return None | 1018 | return None |
280 | 1026 | 1019 | ||
281 | 1027 | def has_id(self, file_id): | ||
282 | 1028 | try: | ||
283 | 1029 | self.id2path(file_id) | ||
284 | 1030 | except errors.NoSuchId: | ||
285 | 1031 | return False | ||
286 | 1032 | else: | ||
287 | 1033 | return True | ||
288 | 1034 | |||
289 | 1035 | def id2path(self, file_id): | 1020 | def id2path(self, file_id): |
290 | 1036 | if file_id is None: | 1021 | if file_id is None: |
291 | 1037 | return '' | 1022 | return '' |
292 | 1038 | 1023 | ||
293 | === modified file 'breezy/merge.py' | |||
294 | --- breezy/merge.py 2019-09-22 15:13:51 +0000 | |||
295 | +++ breezy/merge.py 2019-10-13 15:35:30 +0000 | |||
296 | @@ -1854,7 +1854,11 @@ | |||
297 | 1854 | name_in_target = osutils.basename(self._target_subdir) | 1854 | name_in_target = osutils.basename(self._target_subdir) |
298 | 1855 | merge_into_root = subdir.copy() | 1855 | merge_into_root = subdir.copy() |
299 | 1856 | merge_into_root.name = name_in_target | 1856 | merge_into_root.name = name_in_target |
301 | 1857 | if self.this_tree.has_id(merge_into_root.file_id): | 1857 | try: |
302 | 1858 | self.this_tree.id2path(merge_into_root.file_id) | ||
303 | 1859 | except errors.NoSuchId: | ||
304 | 1860 | pass | ||
305 | 1861 | else: | ||
306 | 1858 | # Give the root a new file-id. | 1862 | # Give the root a new file-id. |
307 | 1859 | # This can happen fairly easily if the directory we are | 1863 | # This can happen fairly easily if the directory we are |
308 | 1860 | # incorporating is the root, and both trees have 'TREE_ROOT' as | 1864 | # incorporating is the root, and both trees have 'TREE_ROOT' as |
309 | 1861 | 1865 | ||
310 | === modified file 'breezy/tests/blackbox/test_join.py' | |||
311 | --- breezy/tests/blackbox/test_join.py 2019-09-22 12:47:23 +0000 | |||
312 | +++ breezy/tests/blackbox/test_join.py 2019-10-13 15:35:30 +0000 | |||
313 | @@ -73,7 +73,7 @@ | |||
314 | 73 | self.addCleanup(sub_tree.unlock) | 73 | self.addCleanup(sub_tree.unlock) |
315 | 74 | if sub_tree.supports_setting_file_ids(): | 74 | if sub_tree.supports_setting_file_ids(): |
316 | 75 | self.assertEqual(b'file1-id', sub_tree.path2id('file1')) | 75 | self.assertEqual(b'file1-id', sub_tree.path2id('file1')) |
318 | 76 | self.assertTrue(sub_tree.has_id(b'file1-id')) | 76 | self.assertEqual('file1', sub_tree.id2path(b'file1-id')) |
319 | 77 | self.assertEqual(subtree_root_id, sub_tree.path2id('')) | 77 | self.assertEqual(subtree_root_id, sub_tree.path2id('')) |
320 | 78 | self.assertEqual('', sub_tree.id2path(subtree_root_id)) | 78 | self.assertEqual('', sub_tree.id2path(subtree_root_id)) |
321 | 79 | self.assertIs(None, base_tree.path2id('subtree/file1')) | 79 | self.assertIs(None, base_tree.path2id('subtree/file1')) |
322 | @@ -83,7 +83,7 @@ | |||
323 | 83 | self.assertEqual(['subtree'], list(base_tree.iter_references())) | 83 | self.assertEqual(['subtree'], list(base_tree.iter_references())) |
324 | 84 | if base_tree.supports_setting_file_ids(): | 84 | if base_tree.supports_setting_file_ids(): |
325 | 85 | self.assertEqual(b'file1-id', sub_tree.path2id('file1')) | 85 | self.assertEqual(b'file1-id', sub_tree.path2id('file1')) |
327 | 86 | self.assertFalse(base_tree.has_id(b'file1-id')) | 86 | self.assertEqual('file1', sub_tree.id2path(b'file1-id')) |
328 | 87 | self.assertEqual(subtree_root_id, base_tree.path2id('subtree')) | 87 | self.assertEqual(subtree_root_id, base_tree.path2id('subtree')) |
329 | 88 | self.assertEqual('subtree', base_tree.id2path(subtree_root_id)) | 88 | self.assertEqual('subtree', base_tree.id2path(subtree_root_id)) |
330 | 89 | 89 | ||
331 | 90 | 90 | ||
332 | === modified file 'breezy/tests/per_tree/test_tree.py' | |||
333 | --- breezy/tests/per_tree/test_tree.py 2019-09-22 12:47:23 +0000 | |||
334 | +++ breezy/tests/per_tree/test_tree.py 2019-10-13 15:35:30 +0000 | |||
335 | @@ -295,20 +295,6 @@ | |||
336 | 295 | list(tree.iter_child_entries('unknown'))) | 295 | list(tree.iter_child_entries('unknown'))) |
337 | 296 | 296 | ||
338 | 297 | 297 | ||
339 | 298 | class TestHasId(TestCaseWithTree): | ||
340 | 299 | |||
341 | 300 | def test_has_id(self): | ||
342 | 301 | work_tree = self.make_branch_and_tree('tree') | ||
343 | 302 | self.build_tree(['tree/file']) | ||
344 | 303 | work_tree.add('file') | ||
345 | 304 | file_id = work_tree.path2id('file') | ||
346 | 305 | tree = self._convert_tree(work_tree) | ||
347 | 306 | tree.lock_read() | ||
348 | 307 | self.addCleanup(tree.unlock) | ||
349 | 308 | self.assertTrue(tree.has_id(file_id)) | ||
350 | 309 | self.assertFalse(tree.has_id(b'dir-id')) | ||
351 | 310 | |||
352 | 311 | |||
353 | 312 | class TestExtras(TestCaseWithTree): | 298 | class TestExtras(TestCaseWithTree): |
354 | 313 | 299 | ||
355 | 314 | def test_extras(self): | 300 | def test_extras(self): |
356 | 315 | 301 | ||
357 | === modified file 'breezy/tests/per_workingtree/test_commit.py' | |||
358 | --- breezy/tests/per_workingtree/test_commit.py 2019-09-25 19:11:10 +0000 | |||
359 | +++ breezy/tests/per_workingtree/test_commit.py 2019-10-13 15:35:30 +0000 | |||
360 | @@ -312,10 +312,6 @@ | |||
361 | 312 | # a present on disk. After commit b-id, c-id and d-id should be | 312 | # a present on disk. After commit b-id, c-id and d-id should be |
362 | 313 | # missing from the inventory, within the same tree transaction. | 313 | # missing from the inventory, within the same tree transaction. |
363 | 314 | wt.commit('commit stuff') | 314 | wt.commit('commit stuff') |
364 | 315 | self.assertTrue(wt.has_id(a_id)) | ||
365 | 316 | self.assertFalse(wt.has_id(b_id)) | ||
366 | 317 | self.assertFalse(wt.has_id(c_id)) | ||
367 | 318 | self.assertFalse(wt.has_id(d_id)) | ||
368 | 319 | self.assertTrue(wt.has_filename('a')) | 315 | self.assertTrue(wt.has_filename('a')) |
369 | 320 | self.assertFalse(wt.has_filename('b')) | 316 | self.assertFalse(wt.has_filename('b')) |
370 | 321 | self.assertFalse(wt.has_filename('b/c')) | 317 | self.assertFalse(wt.has_filename('b/c')) |
371 | @@ -324,16 +320,11 @@ | |||
372 | 324 | # the changes should have persisted to disk - reopen the workingtree | 320 | # the changes should have persisted to disk - reopen the workingtree |
373 | 325 | # to be sure. | 321 | # to be sure. |
374 | 326 | wt = wt.controldir.open_workingtree() | 322 | wt = wt.controldir.open_workingtree() |
385 | 327 | wt.lock_read() | 323 | with wt.lock_read(): |
386 | 328 | self.assertTrue(wt.has_id(a_id)) | 324 | self.assertTrue(wt.has_filename('a')) |
387 | 329 | self.assertFalse(wt.has_id(b_id)) | 325 | self.assertFalse(wt.has_filename('b')) |
388 | 330 | self.assertFalse(wt.has_id(c_id)) | 326 | self.assertFalse(wt.has_filename('b/c')) |
389 | 331 | self.assertFalse(wt.has_id(d_id)) | 327 | self.assertFalse(wt.has_filename('d')) |
380 | 332 | self.assertTrue(wt.has_filename('a')) | ||
381 | 333 | self.assertFalse(wt.has_filename('b')) | ||
382 | 334 | self.assertFalse(wt.has_filename('b/c')) | ||
383 | 335 | self.assertFalse(wt.has_filename('d')) | ||
384 | 336 | wt.unlock() | ||
390 | 337 | 328 | ||
391 | 338 | def test_commit_deleted_subtree_with_removed(self): | 329 | def test_commit_deleted_subtree_with_removed(self): |
392 | 339 | wt = self.make_branch_and_tree('.') | 330 | wt = self.make_branch_and_tree('.') |
393 | @@ -346,15 +337,12 @@ | |||
394 | 346 | wt.remove('b/c') | 337 | wt.remove('b/c') |
395 | 347 | this_dir = wt.controldir.root_transport | 338 | this_dir = wt.controldir.root_transport |
396 | 348 | this_dir.delete_tree('b') | 339 | this_dir.delete_tree('b') |
406 | 349 | wt.lock_write() | 340 | with wt.lock_write(): |
407 | 350 | wt.commit('commit deleted rename') | 341 | wt.commit('commit deleted rename') |
408 | 351 | self.assertTrue(wt.is_versioned('a')) | 342 | self.assertTrue(wt.is_versioned('a')) |
409 | 352 | self.assertFalse(wt.has_id(b_id)) | 343 | self.assertTrue(wt.has_filename('a')) |
410 | 353 | self.assertFalse(wt.has_id(c_id)) | 344 | self.assertFalse(wt.has_filename('b')) |
411 | 354 | self.assertTrue(wt.has_filename('a')) | 345 | self.assertFalse(wt.has_filename('b/c')) |
403 | 355 | self.assertFalse(wt.has_filename('b')) | ||
404 | 356 | self.assertFalse(wt.has_filename('b/c')) | ||
405 | 357 | wt.unlock() | ||
412 | 358 | 346 | ||
413 | 359 | def test_commit_move_new(self): | 347 | def test_commit_move_new(self): |
414 | 360 | wt = self.make_branch_and_tree('first') | 348 | wt = self.make_branch_and_tree('first') |
415 | 361 | 349 | ||
416 | === modified file 'breezy/tests/per_workingtree/test_executable.py' | |||
417 | --- breezy/tests/per_workingtree/test_executable.py 2019-06-17 23:01:58 +0000 | |||
418 | +++ breezy/tests/per_workingtree/test_executable.py 2019-10-13 15:35:30 +0000 | |||
419 | @@ -52,16 +52,13 @@ | |||
420 | 52 | the inventory still shows them, so don't assert that | 52 | the inventory still shows them, so don't assert that |
421 | 53 | the inventory is empty, just that the tree doesn't have them | 53 | the inventory is empty, just that the tree doesn't have them |
422 | 54 | """ | 54 | """ |
433 | 55 | tree.lock_read() | 55 | with tree.lock_read(): |
434 | 56 | if not ignore_inv and getattr(tree, 'root_inventory', None): | 56 | if not ignore_inv and getattr(tree, 'root_inventory', None): |
435 | 57 | self.assertEqual( | 57 | self.assertEqual( |
436 | 58 | [('', tree.root_inventory.root)], | 58 | [('', tree.root_inventory.root)], |
437 | 59 | list(tree.root_inventory.iter_entries())) | 59 | list(tree.root_inventory.iter_entries())) |
438 | 60 | self.assertFalse(tree.has_id(self.a_id)) | 60 | self.assertFalse(tree.has_filename('a')) |
439 | 61 | self.assertFalse(tree.has_filename('a')) | 61 | self.assertFalse(tree.has_filename('b')) |
430 | 62 | self.assertFalse(tree.has_id(self.b_id)) | ||
431 | 63 | self.assertFalse(tree.has_filename('b')) | ||
432 | 64 | tree.unlock() | ||
440 | 65 | 62 | ||
441 | 66 | def commit_and_branch(self): | 63 | def commit_and_branch(self): |
442 | 67 | """Commit the current tree, and create a second tree""" | 64 | """Commit the current tree, and create a second tree""" |
443 | 68 | 65 | ||
444 | === modified file 'breezy/tests/test_bundle.py' | |||
445 | --- breezy/tests/test_bundle.py 2019-08-11 13:33:45 +0000 | |||
446 | +++ breezy/tests/test_bundle.py 2019-10-13 15:35:30 +0000 | |||
447 | @@ -148,10 +148,10 @@ | |||
448 | 148 | return self.ids.get(path) | 148 | return self.ids.get(path) |
449 | 149 | 149 | ||
450 | 150 | def id2path(self, file_id): | 150 | def id2path(self, file_id): |
455 | 151 | return self.paths.get(file_id) | 151 | try: |
456 | 152 | 152 | return self.paths[file_id] | |
457 | 153 | def has_id(self, file_id): | 153 | except KeyError: |
458 | 154 | return self.id2path(file_id) is not None | 154 | raise errors.NoSuchId(file_id, self) |
459 | 155 | 155 | ||
460 | 156 | def get_file(self, path): | 156 | def get_file(self, path): |
461 | 157 | result = BytesIO() | 157 | result = BytesIO() |
462 | @@ -270,7 +270,7 @@ | |||
463 | 270 | btree = self.make_tree_1()[0] | 270 | btree = self.make_tree_1()[0] |
464 | 271 | btree.note_rename("grandparent/parent/file", | 271 | btree.note_rename("grandparent/parent/file", |
465 | 272 | "grandparent/alt_parent/file") | 272 | "grandparent/alt_parent/file") |
467 | 273 | self.assertTrue(btree.id2path(b"e") is None) | 273 | self.assertRaises(errors.NoSuchId, btree.id2path, b"e") |
468 | 274 | self.assertFalse(btree.is_versioned("grandparent/parent/file")) | 274 | self.assertFalse(btree.is_versioned("grandparent/parent/file")) |
469 | 275 | btree.note_id(b"e", "grandparent/parent/file") | 275 | btree.note_id(b"e", "grandparent/parent/file") |
470 | 276 | return btree | 276 | return btree |
471 | @@ -292,16 +292,6 @@ | |||
472 | 292 | self.assertEqual( | 292 | self.assertEqual( |
473 | 293 | btree.get_symlink_target('grandparent/parent/symlink'), 'venus') | 293 | btree.get_symlink_target('grandparent/parent/symlink'), 'venus') |
474 | 294 | 294 | ||
475 | 295 | def test_adds2(self): | ||
476 | 296 | """File/inventory adds, with patch-compatibile renames""" | ||
477 | 297 | btree = self.make_tree_2() | ||
478 | 298 | btree.contents_by_id = False | ||
479 | 299 | add_patch = self.unified_diff([b"Hello\n"], [b"Extra cheese\n"]) | ||
480 | 300 | btree.note_patch("grandparent/parent/file", add_patch) | ||
481 | 301 | btree.note_id(b'f', 'grandparent/parent/symlink', kind='symlink') | ||
482 | 302 | btree.note_target('grandparent/parent/symlink', 'venus') | ||
483 | 303 | self.adds_test(btree) | ||
484 | 304 | |||
485 | 305 | def make_tree_3(self): | 295 | def make_tree_3(self): |
486 | 306 | btree, mtree = self.make_tree_1() | 296 | btree, mtree = self.make_tree_1() |
487 | 307 | mtree.add_file(b"e", "grandparent/parent/topping", b"Anchovies\n") | 297 | mtree.add_file(b"e", "grandparent/parent/topping", b"Anchovies\n") |
488 | @@ -324,23 +314,13 @@ | |||
489 | 324 | btree.note_patch("grandparent/alt_parent/stopping", mod_patch) | 314 | btree.note_patch("grandparent/alt_parent/stopping", mod_patch) |
490 | 325 | self.get_file_test(btree) | 315 | self.get_file_test(btree) |
491 | 326 | 316 | ||
492 | 327 | def test_get_file2(self): | ||
493 | 328 | """Get file contents, with patch-compatible renames""" | ||
494 | 329 | btree = self.make_tree_3() | ||
495 | 330 | btree.contents_by_id = False | ||
496 | 331 | mod_patch = self.unified_diff([], [b"Lemon\n"]) | ||
497 | 332 | btree.note_patch("grandparent/alt_parent/stopping", mod_patch) | ||
498 | 333 | mod_patch = self.unified_diff([], [b"Hello\n"]) | ||
499 | 334 | btree.note_patch("grandparent/alt_parent/file", mod_patch) | ||
500 | 335 | self.get_file_test(btree) | ||
501 | 336 | |||
502 | 337 | def test_delete(self): | 317 | def test_delete(self): |
503 | 338 | "Deletion by bundle" | 318 | "Deletion by bundle" |
504 | 339 | btree = self.make_tree_1()[0] | 319 | btree = self.make_tree_1()[0] |
505 | 340 | with btree.get_file(btree.id2path(b"c")) as f: | 320 | with btree.get_file(btree.id2path(b"c")) as f: |
506 | 341 | self.assertEqual(f.read(), b"Hello\n") | 321 | self.assertEqual(f.read(), b"Hello\n") |
507 | 342 | btree.note_deletion("grandparent/parent/file") | 322 | btree.note_deletion("grandparent/parent/file") |
509 | 343 | self.assertTrue(btree.id2path(b"c") is None) | 323 | self.assertRaises(errors.NoSuchId, btree.id2path, b"c") |
510 | 344 | self.assertFalse(btree.is_versioned("grandparent/parent/file")) | 324 | self.assertFalse(btree.is_versioned("grandparent/parent/file")) |
511 | 345 | 325 | ||
512 | 346 | def sorted_ids(self, tree): | 326 | def sorted_ids(self, tree): |
513 | 347 | 327 | ||
514 | === modified file 'breezy/tests/test_commit.py' | |||
515 | --- breezy/tests/test_commit.py 2019-06-15 15:59:17 +0000 | |||
516 | +++ breezy/tests/test_commit.py 2019-10-13 15:35:30 +0000 | |||
517 | @@ -173,7 +173,7 @@ | |||
518 | 173 | reporter.calls) | 173 | reporter.calls) |
519 | 174 | 174 | ||
520 | 175 | tree = b.repository.revision_tree(b'rev2') | 175 | tree = b.repository.revision_tree(b'rev2') |
522 | 176 | self.assertFalse(tree.has_id(b'hello-id')) | 176 | self.assertFalse(tree.has_filename('hello')) |
523 | 177 | 177 | ||
524 | 178 | def test_partial_commit_move(self): | 178 | def test_partial_commit_move(self): |
525 | 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. |
526 | @@ -361,7 +361,7 @@ | |||
527 | 361 | wt.commit('removed hello', rev_id=b'rev2') | 361 | wt.commit('removed hello', rev_id=b'rev2') |
528 | 362 | 362 | ||
529 | 363 | tree = b.repository.revision_tree(b'rev2') | 363 | tree = b.repository.revision_tree(b'rev2') |
531 | 364 | self.assertFalse(tree.has_id(b'hello-id')) | 364 | self.assertFalse(tree.has_filename('hello')) |
532 | 365 | 365 | ||
533 | 366 | def test_committed_ancestry(self): | 366 | def test_committed_ancestry(self): |
534 | 367 | """Test commit appends revisions to ancestry.""" | 367 | """Test commit appends revisions to ancestry.""" |
535 | 368 | 368 | ||
536 | === modified file 'breezy/tests/test_memorytree.py' | |||
537 | --- breezy/tests/test_memorytree.py 2019-06-29 13:16:26 +0000 | |||
538 | +++ breezy/tests/test_memorytree.py 2019-10-13 15:35:30 +0000 | |||
539 | @@ -170,7 +170,7 @@ | |||
540 | 170 | kinds=['directory', 'file']) | 170 | kinds=['directory', 'file']) |
541 | 171 | tree.unversion(['foo']) | 171 | tree.unversion(['foo']) |
542 | 172 | self.assertFalse(tree.is_versioned('foo')) | 172 | self.assertFalse(tree.is_versioned('foo')) |
544 | 173 | self.assertFalse(tree.has_id(b'foo-id')) | 173 | self.assertRaises(errors.NoSuchId, tree.id2path, b'foo-id') |
545 | 174 | 174 | ||
546 | 175 | def test_last_revision(self): | 175 | def test_last_revision(self): |
547 | 176 | """There should be a last revision method we can call.""" | 176 | """There should be a last revision method we can call.""" |
548 | 177 | 177 | ||
549 | === modified file 'breezy/tests/test_shelf.py' | |||
550 | --- breezy/tests/test_shelf.py 2018-11-16 18:33:17 +0000 | |||
551 | +++ breezy/tests/test_shelf.py 2019-10-13 15:35:30 +0000 | |||
552 | @@ -381,8 +381,8 @@ | |||
553 | 381 | return creator, tree | 381 | return creator, tree |
554 | 382 | 382 | ||
555 | 383 | def check_shelve_deletion(self, tree): | 383 | def check_shelve_deletion(self, tree): |
558 | 384 | self.assertTrue(tree.has_id(b'foo-id')) | 384 | self.assertEqual(tree.id2path(b'foo-id'), 'foo') |
559 | 385 | self.assertTrue(tree.has_id(b'bar-id')) | 385 | self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar') |
560 | 386 | self.assertFileEqual(b'baz', 'tree/foo/bar') | 386 | self.assertFileEqual(b'baz', 'tree/foo/bar') |
561 | 387 | 387 | ||
562 | 388 | def test_shelve_deletion(self): | 388 | def test_shelve_deletion(self): |
563 | @@ -611,15 +611,15 @@ | |||
564 | 611 | creator.transform() | 611 | creator.transform() |
565 | 612 | creator.finalize() | 612 | creator.finalize() |
566 | 613 | # validate the test setup | 613 | # validate the test setup |
569 | 614 | self.assertTrue(tree.has_id(b'foo-id')) | 614 | self.assertEqual(tree.id2path(b'foo-id'), 'foo') |
570 | 615 | self.assertTrue(tree.has_id(b'bar-id')) | 615 | self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar') |
571 | 616 | self.assertFileEqual(b'baz', 'tree/foo/bar') | 616 | self.assertFileEqual(b'baz', 'tree/foo/bar') |
572 | 617 | with open('shelf', 'r+b') as shelf_file: | 617 | with open('shelf', 'r+b') as shelf_file: |
573 | 618 | unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file) | 618 | unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file) |
574 | 619 | self.addCleanup(unshelver.finalize) | 619 | self.addCleanup(unshelver.finalize) |
575 | 620 | unshelver.make_merger().do_merge() | 620 | unshelver.make_merger().do_merge() |
578 | 621 | self.assertFalse(tree.has_id(b'foo-id')) | 621 | self.assertRaises(errors.NoSuchId, tree.id2path, b'foo-id') |
579 | 622 | self.assertFalse(tree.has_id(b'bar-id')) | 622 | self.assertRaises(errors.NoSuchId, tree.id2path, b'bar-id') |
580 | 623 | 623 | ||
581 | 624 | def test_unshelve_base(self): | 624 | def test_unshelve_base(self): |
582 | 625 | tree = self.make_branch_and_tree('tree') | 625 | tree = self.make_branch_and_tree('tree') |
583 | 626 | 626 | ||
584 | === modified file 'breezy/tests/test_smart_add.py' | |||
585 | --- breezy/tests/test_smart_add.py 2019-06-29 13:16:26 +0000 | |||
586 | +++ breezy/tests/test_smart_add.py 2019-10-13 15:35:30 +0000 | |||
587 | @@ -17,6 +17,7 @@ | |||
588 | 17 | from .. import ( | 17 | from .. import ( |
589 | 18 | add, | 18 | add, |
590 | 19 | cache_utf8, | 19 | cache_utf8, |
591 | 20 | errors, | ||
592 | 20 | tests, | 21 | tests, |
593 | 21 | ) | 22 | ) |
594 | 22 | from ..bzr import ( | 23 | from ..bzr import ( |
595 | @@ -116,11 +117,11 @@ | |||
596 | 116 | self.assertNotEqual(None, c_id) | 117 | self.assertNotEqual(None, c_id) |
597 | 117 | self.base_tree.lock_read() | 118 | self.base_tree.lock_read() |
598 | 118 | self.addCleanup(self.base_tree.unlock) | 119 | self.addCleanup(self.base_tree.unlock) |
600 | 119 | self.assertFalse(self.base_tree.has_id(c_id)) | 120 | self.assertRaises(errors.NoSuchId, self.base_tree.id2path, c_id) |
601 | 120 | 121 | ||
602 | 121 | d_id = new_tree.path2id('subdir/d') | 122 | d_id = new_tree.path2id('subdir/d') |
603 | 122 | self.assertNotEqual(None, d_id) | 123 | self.assertNotEqual(None, d_id) |
605 | 123 | self.assertFalse(self.base_tree.has_id(d_id)) | 124 | self.assertRaises(errors.NoSuchId, self.base_tree.id2path, d_id) |
606 | 124 | 125 | ||
607 | 125 | def test_copy_existing_dir(self): | 126 | def test_copy_existing_dir(self): |
608 | 126 | self.make_base_tree() | 127 | self.make_base_tree() |
609 | @@ -141,7 +142,7 @@ | |||
610 | 141 | self.assertNotEqual(None, a_id) | 142 | self.assertNotEqual(None, a_id) |
611 | 142 | self.base_tree.lock_read() | 143 | self.base_tree.lock_read() |
612 | 143 | self.addCleanup(self.base_tree.unlock) | 144 | self.addCleanup(self.base_tree.unlock) |
614 | 144 | self.assertFalse(self.base_tree.has_id(a_id)) | 145 | self.assertRaises(errors.NoSuchId, self.base_tree.id2path, a_id) |
615 | 145 | 146 | ||
616 | 146 | 147 | ||
617 | 147 | class TestAddActions(tests.TestCase): | 148 | class TestAddActions(tests.TestCase): |
618 | 148 | 149 | ||
619 | === modified file 'breezy/transform.py' | |||
620 | --- breezy/transform.py 2019-09-25 19:11:10 +0000 | |||
621 | +++ breezy/transform.py 2019-10-13 15:35:30 +0000 | |||
622 | @@ -2121,18 +2121,6 @@ | |||
623 | 2121 | 2121 | ||
624 | 2122 | return tree_paths | 2122 | return tree_paths |
625 | 2123 | 2123 | ||
626 | 2124 | def _has_id(self, file_id, fallback_check): | ||
627 | 2125 | if file_id in self._transform._r_new_id: | ||
628 | 2126 | return True | ||
629 | 2127 | elif file_id in {self._transform.tree_file_id(trans_id) for | ||
630 | 2128 | trans_id in self._transform._removed_id}: | ||
631 | 2129 | return False | ||
632 | 2130 | else: | ||
633 | 2131 | return fallback_check(file_id) | ||
634 | 2132 | |||
635 | 2133 | def has_id(self, file_id): | ||
636 | 2134 | return self._has_id(file_id, self._transform._tree.has_id) | ||
637 | 2135 | |||
638 | 2136 | def _path2trans_id(self, path): | 2124 | def _path2trans_id(self, path): |
639 | 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. |
640 | 2138 | trans_id = self._path2trans_id_cache.get(path, object) | 2126 | trans_id = self._path2trans_id_cache.get(path, object) |
641 | @@ -2180,11 +2168,6 @@ | |||
642 | 2180 | self._all_children_cache[trans_id] = children | 2168 | self._all_children_cache[trans_id] = children |
643 | 2181 | return children | 2169 | return children |
644 | 2182 | 2170 | ||
645 | 2183 | def _iter_children(self, file_id): | ||
646 | 2184 | trans_id = self._transform.trans_id_file_id(file_id) | ||
647 | 2185 | for child_trans_id in self._all_children(trans_id): | ||
648 | 2186 | yield self._transform.final_file_id(child_trans_id) | ||
649 | 2187 | |||
650 | 2188 | def extras(self): | 2171 | def extras(self): |
651 | 2189 | possible_extras = set(self._transform.trans_id_tree_path(p) for p | 2172 | possible_extras = set(self._transform.trans_id_tree_path(p) for p |
652 | 2190 | in self._transform._tree.extras()) | 2173 | in self._transform._tree.extras()) |
653 | @@ -2561,13 +2544,6 @@ | |||
654 | 2561 | return [(self.get_path(t), t) for t in trans_ids] | 2544 | return [(self.get_path(t), t) for t in trans_ids] |
655 | 2562 | 2545 | ||
656 | 2563 | 2546 | ||
657 | 2564 | def topology_sorted_ids(tree): | ||
658 | 2565 | """Determine the topological order of the ids in a tree""" | ||
659 | 2566 | file_ids = list(tree) | ||
660 | 2567 | file_ids.sort(key=tree.id2path) | ||
661 | 2568 | return file_ids | ||
662 | 2569 | |||
663 | 2570 | |||
664 | 2571 | def build_tree(tree, wt, accelerator_tree=None, hardlink=False, | 2547 | def build_tree(tree, wt, accelerator_tree=None, hardlink=False, |
665 | 2572 | delta_from_tree=False): | 2548 | delta_from_tree=False): |
666 | 2573 | """Create working tree for a branch, using a TreeTransform. | 2549 | """Create working tree for a branch, using a TreeTransform. |
Changes here all look sensible. I'm down with making expensive things look expensive.