Merge lp:~jelmer/brz/id2path-recurse 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/id2path-recurse
Merge into: lp:brz
Diff against target: 293 lines (+60/-49)
12 files modified
breezy/bzr/bundle/bundle_data.py (+9/-8)
breezy/bzr/fetch.py (+2/-1)
breezy/bzr/inventorytree.py (+11/-14)
breezy/bzr/workingtree_4.py (+24/-18)
breezy/git/tree.py (+2/-2)
breezy/plugins/fastimport/revision_store.py (+1/-1)
breezy/plugins/rewrite/maptree.py (+2/-2)
breezy/tests/per_tree/test_ids.py (+2/-0)
breezy/tests/test_bundle.py (+1/-1)
breezy/transform.py (+1/-1)
breezy/tree.py (+1/-1)
doc/en/release-notes/brz-3.1.txt (+4/-0)
To merge this branch: bzr merge lp:~jelmer/brz/id2path-recurse
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+377805@code.launchpad.net

Commit message

Support recurse argument to id2path.

Description of the change

Support recurse argument to id2path.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/bzr/bundle/bundle_data.py'
2--- breezy/bzr/bundle/bundle_data.py 2019-11-22 04:59:15 +0000
3+++ breezy/bzr/bundle/bundle_data.py 2020-01-19 14:53:39 +0000
4@@ -47,7 +47,10 @@
5 )
6 from ..testament import StrictTestament
7 from ...trace import mutter, warning
8-from ...tree import Tree
9+from ...tree import (
10+ Tree,
11+ find_previous_path,
12+ )
13 from ..xml5 import serializer_v5
14
15
16@@ -595,12 +598,12 @@
17 return None
18 return self.base_tree.path2id(old_path)
19
20- def id2path(self, file_id):
21+ def id2path(self, file_id, recurse='down'):
22 """Return the new path in the target tree of the file with id file_id"""
23 path = self._new_id_r.get(file_id)
24 if path is not None:
25 return path
26- old_path = self.base_tree.id2path(file_id)
27+ old_path = self.base_tree.id2path(file_id, recurse)
28 if old_path is None:
29 raise NoSuchId(file_id, self)
30 if old_path in self.deleted:
31@@ -618,10 +621,8 @@
32 in the text-store, so that the file contents would
33 then be cached.
34 """
35- file_id = self.path2id(path)
36- try:
37- old_path = self.base_tree.id2path(file_id)
38- except NoSuchId:
39+ old_path = find_previous_path(self, self.base_tree, path)
40+ if old_path is None:
41 patch_original = None
42 else:
43 patch_original = self.base_tree.get_file(old_path)
44@@ -771,7 +772,7 @@
45 paths.append(result)
46 for id in self.base_tree.all_file_ids():
47 try:
48- path = self.id2path(id)
49+ path = self.id2path(id, recurse='none')
50 except NoSuchId:
51 continue
52 paths.append((path, id))
53
54=== modified file 'breezy/bzr/fetch.py'
55--- breezy/bzr/fetch.py 2019-06-29 13:16:26 +0000
56+++ breezy/bzr/fetch.py 2020-01-19 14:53:39 +0000
57@@ -319,7 +319,8 @@
58 else:
59 try:
60 parent_ids.append(
61- tree.get_file_revision(tree.id2path(root_id)))
62+ tree.get_file_revision(
63+ tree.id2path(root_id, recurse='none')))
64 except errors.NoSuchId:
65 # not in the tree
66 pass
67
68=== modified file 'breezy/bzr/inventorytree.py'
69--- breezy/bzr/inventorytree.py 2020-01-19 03:22:04 +0000
70+++ breezy/bzr/inventorytree.py 2020-01-19 14:53:39 +0000
71@@ -187,7 +187,7 @@
72 return None, None
73 return inv, ie.file_id
74
75- def id2path(self, file_id):
76+ def id2path(self, file_id, recurse='down'):
77 """Return the path for a file id.
78
79 :raises NoSuchId:
80@@ -196,20 +196,17 @@
81 try:
82 return inventory.id2path(file_id)
83 except errors.NoSuchId:
84- if 'evil' in debug.debug_flags:
85- trace.mutter_callsite(
86- 2, "id2path with nested trees scales with tree size.")
87- for path in self.iter_references():
88- try:
89+ if recurse == 'down':
90+ if 'evil' in debug.debug_flags:
91+ trace.mutter_callsite(
92+ 2, "id2path with nested trees scales with tree size.")
93+ for path in self.iter_references():
94 subtree = self.get_nested_tree(path)
95- except errors.NotBranchError:
96- continue
97- try:
98- return osutils.pathjoin(path, subtree.id2path(file_id))
99- except errors.NoSuchId:
100- pass
101- else:
102- raise errors.NoSuchId(self, file_id)
103+ try:
104+ return osutils.pathjoin(path, subtree.id2path(file_id))
105+ except errors.NoSuchId:
106+ pass
107+ raise errors.NoSuchId(self, file_id)
108
109 def all_file_ids(self):
110 return {entry.file_id for path, entry in self.iter_entries_by_dir()}
111
112=== modified file 'breezy/bzr/workingtree_4.py'
113--- breezy/bzr/workingtree_4.py 2020-01-18 00:05:13 +0000
114+++ breezy/bzr/workingtree_4.py 2020-01-19 14:53:39 +0000
115@@ -474,22 +474,23 @@
116 def get_nested_tree(self, path):
117 return WorkingTree.open(self.abspath(path))
118
119- def id2path(self, file_id):
120+ def id2path(self, file_id, recurse='down'):
121 "Convert a file-id to a path."
122 with self.lock_read():
123 state = self.current_dirstate()
124 entry = self._get_entry(file_id=file_id)
125 if entry == (None, None):
126- if 'evil' in debug.debug_flags:
127- trace.mutter_callsite(
128- 2, "Tree.id2path scans all nested trees.")
129- for nested_path in self.iter_references():
130- nested_tree = self.get_nested_tree(nested_path)
131- try:
132- return osutils.pathjoin(
133- nested_path, nested_tree.id2path(file_id))
134- except errors.NoSuchId:
135- pass
136+ if recurse == 'down':
137+ if 'evil' in debug.debug_flags:
138+ trace.mutter_callsite(
139+ 2, "Tree.id2path scans all nested trees.")
140+ for nested_path in self.iter_references():
141+ nested_tree = self.get_nested_tree(nested_path)
142+ try:
143+ return osutils.pathjoin(
144+ nested_path, nested_tree.id2path(file_id))
145+ except errors.NoSuchId:
146+ pass
147 raise errors.NoSuchId(tree=self, file_id=file_id)
148 path_utf8 = osutils.pathjoin(entry[0][0], entry[0][1])
149 return path_utf8.decode('utf8')
150@@ -1754,17 +1755,22 @@
151 pred = self.has_filename
152 return set((p for p in paths if not pred(p)))
153
154- def id2path(self, file_id):
155+ def id2path(self, file_id, recurse='down'):
156 "Convert a file-id to a path."
157 with self.lock_read():
158 entry = self._get_entry(file_id=file_id)
159 if entry == (None, None):
160- for nested_path in self.iter_references():
161- nested_tree = self.get_nested_tree(nested_path)
162- try:
163- return osutils.pathjoin(nested_path, nested_tree.id2path(file_id))
164- except errors.NoSuchId:
165- pass
166+ if recurse == 'down':
167+ if 'evil' in debug.debug_flags:
168+ trace.mutter_callsite(
169+ 2, "Tree.id2path scans all nested trees.")
170+
171+ for nested_path in self.iter_references():
172+ nested_tree = self.get_nested_tree(nested_path)
173+ try:
174+ return osutils.pathjoin(nested_path, nested_tree.id2path(file_id))
175+ except errors.NoSuchId:
176+ pass
177 raise errors.NoSuchId(tree=self, file_id=file_id)
178 path_utf8 = osutils.pathjoin(entry[0][0], entry[0][1])
179 return path_utf8.decode('utf8')
180
181=== modified file 'breezy/git/tree.py'
182--- breezy/git/tree.py 2020-01-11 04:11:04 +0000
183+++ breezy/git/tree.py 2020-01-19 14:53:39 +0000
184@@ -342,7 +342,7 @@
185 raise _mod_tree.FileTimestampUnavailable(path)
186 return rev.timestamp
187
188- def id2path(self, file_id):
189+ def id2path(self, file_id, recurse='down'):
190 try:
191 path = self.mapping.parse_file_id(file_id)
192 except ValueError:
193@@ -1072,7 +1072,7 @@
194 osutils.safe_unicode(path))
195 return None
196
197- def id2path(self, file_id):
198+ def id2path(self, file_id, recurse='down'):
199 if file_id is None:
200 return ''
201 if type(file_id) is not bytes:
202
203=== modified file 'breezy/plugins/fastimport/revision_store.py'
204--- breezy/plugins/fastimport/revision_store.py 2019-09-22 13:03:16 +0000
205+++ breezy/plugins/fastimport/revision_store.py 2020-01-19 14:53:39 +0000
206@@ -47,7 +47,7 @@
207 self._new_info_by_path = {new_path: ie
208 for _, new_path, file_id, ie in inv_delta}
209
210- def id2path(self, file_id):
211+ def id2path(self, file_id, recurse='down'):
212 if file_id in self._new_info_by_id:
213 new_path = self._new_info_by_id[file_id][0]
214 if new_path is None:
215
216=== modified file 'breezy/plugins/rewrite/maptree.py'
217--- breezy/plugins/rewrite/maptree.py 2019-10-27 15:13:53 +0000
218+++ breezy/plugins/rewrite/maptree.py 2020-01-19 14:53:39 +0000
219@@ -120,5 +120,5 @@
220 return None
221 return self.new_id(file_id)
222
223- def id2path(self, file_id):
224- return self.oldtree.id2path(self.old_id(file_id=file_id))
225+ def id2path(self, file_id, recurse='down'):
226+ return self.oldtree.id2path(self.old_id(file_id=file_id), recurse=recurse)
227
228=== modified file 'breezy/tests/per_tree/test_ids.py'
229--- breezy/tests/per_tree/test_ids.py 2019-10-15 19:05:47 +0000
230+++ breezy/tests/per_tree/test_ids.py 2020-01-19 14:53:39 +0000
231@@ -78,6 +78,8 @@
232 self.assertIsNot(None, tree.path2id('subtree/a'))
233 self.assertEqual('subtree', tree.id2path(tree.path2id('subtree')))
234 self.assertEqual('subtree/a', tree.id2path(tree.path2id('subtree/a')))
235+ self.assertIsNot('subtree/a', tree.id2path(tree.path2id('subtree/a'), recurse='down'))
236+ self.assertRaises(errors.NoSuchId, tree.id2path, tree.path2id('subtree/a'), recurse='none')
237
238
239 class Path2IdsTests(TestCaseWithTree):
240
241=== modified file 'breezy/tests/test_bundle.py'
242--- breezy/tests/test_bundle.py 2019-09-27 02:48:17 +0000
243+++ breezy/tests/test_bundle.py 2020-01-19 14:53:39 +0000
244@@ -147,7 +147,7 @@
245 def path2id(self, path):
246 return self.ids.get(path)
247
248- def id2path(self, file_id):
249+ def id2path(self, file_id, recurse='down'):
250 try:
251 return self.paths[file_id]
252 except KeyError:
253
254=== modified file 'breezy/transform.py'
255--- breezy/transform.py 2020-01-18 00:03:58 +0000
256+++ breezy/transform.py 2020-01-19 14:53:39 +0000
257@@ -2155,7 +2155,7 @@
258 path = osutils.pathjoin(*path)
259 return self._transform.final_file_id(self._path2trans_id(path))
260
261- def id2path(self, file_id):
262+ def id2path(self, file_id, recurse='down'):
263 trans_id = self._transform.trans_id_file_id(file_id)
264 try:
265 return self._final_paths._determine_path(trans_id)
266
267=== modified file 'breezy/tree.py'
268--- breezy/tree.py 2020-01-18 22:02:05 +0000
269+++ breezy/tree.py 2020-01-19 14:53:39 +0000
270@@ -310,7 +310,7 @@
271 """Iterate through all paths, including paths for missing files."""
272 raise NotImplementedError(self.all_versioned_paths)
273
274- def id2path(self, file_id):
275+ def id2path(self, file_id, recurse='down'):
276 """Return the path for a file id.
277
278 :raises NoSuchId:
279
280=== modified file 'doc/en/release-notes/brz-3.1.txt'
281--- doc/en/release-notes/brz-3.1.txt 2020-01-12 23:41:10 +0000
282+++ doc/en/release-notes/brz-3.1.txt 2020-01-19 14:53:39 +0000
283@@ -161,6 +161,10 @@
284 stripping segment parameters from a URL.
285 (Jelmer Vernooij)
286
287+* ``Tree.id2path`` has a new optional argument ``recurse``,
288+ that determines whether it scans through nested trees.
289+ (Jelmer Vernooij)
290+
291
292 Internals
293 *********

Subscribers

People subscribed via source and target branches