Merge lp:~jelmer/brz/is-versioned into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 6856
Proposed branch: lp:~jelmer/brz/is-versioned
Merge into: lp:brz
Diff against target: 796 lines (+100/-105)
31 files modified
breezy/builtins.py (+1/-1)
breezy/bzr/bzrdir.py (+1/-1)
breezy/bzr/workingtree.py (+3/-2)
breezy/ignores.py (+1/-1)
breezy/plugins/fastimport/tests/test_generic_processor.py (+2/-4)
breezy/rename_map.py (+1/-1)
breezy/tests/__init__.py (+2/-2)
breezy/tests/blackbox/test_mv.py (+6/-6)
breezy/tests/blackbox/test_remove.py (+1/-1)
breezy/tests/blackbox/test_repair_workingtree.py (+2/-2)
breezy/tests/per_intertree/__init__.py (+1/-1)
breezy/tests/per_tree/test_test_trees.py (+3/-0)
breezy/tests/per_tree/test_tree.py (+5/-4)
breezy/tests/per_workingtree/test_get_file_mtime.py (+1/-4)
breezy/tests/per_workingtree/test_inv.py (+1/-1)
breezy/tests/per_workingtree/test_read_working_inventory.py (+1/-4)
breezy/tests/per_workingtree/test_smart_add.py (+14/-15)
breezy/tests/per_workingtree/test_symlinks.py (+8/-8)
breezy/tests/per_workingtree/test_unversion.py (+3/-4)
breezy/tests/per_workingtree/test_workingtree.py (+4/-8)
breezy/tests/test_bundle.py (+7/-7)
breezy/tests/test_commit.py (+3/-7)
breezy/tests/test_inv.py (+3/-3)
breezy/tests/test_merge.py (+1/-1)
breezy/tests/test_transform.py (+7/-7)
breezy/tests/test_uncommit.py (+1/-1)
breezy/tests/test_upstream_import.py (+5/-5)
breezy/tests/test_workingtree_4.py (+2/-2)
breezy/tree.py (+8/-0)
breezy/upstream_import.py (+1/-1)
breezy/workingtree.py (+1/-1)
To merge this branch: bzr merge lp:~jelmer/brz/is-versioned
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+337827@code.launchpad.net

Description of the change

Add Tree.is_versioned().

Another step twoards removing file_ids from the public API.

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

Looks sensible. Probably work an assert helper for all versioned or similar at some point?

review: Approve

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 2017-12-23 10:48:42 +0000
3+++ breezy/builtins.py 2018-02-15 22:17:55 +0000
4@@ -875,7 +875,7 @@
5
6 @classmethod
7 def add_file_with_parents(cls, wt, relpath):
8- if wt.path2id(relpath) is not None:
9+ if wt.is_versioned(relpath):
10 return
11 cls.add_file_with_parents(wt, osutils.dirname(relpath))
12 wt.add([relpath])
13
14=== modified file 'breezy/bzr/bzrdir.py'
15--- breezy/bzr/bzrdir.py 2017-11-23 20:02:55 +0000
16+++ breezy/bzr/bzrdir.py 2018-02-15 22:17:55 +0000
17@@ -451,7 +451,7 @@
18 hardlink=hardlink, from_branch=result_branch)
19 wt.lock_write()
20 try:
21- if wt.path2id('') is None:
22+ if not wt.is_versioned(''):
23 try:
24 wt.set_root_id(self.open_workingtree.get_root_id())
25 except errors.NoWorkingTree:
26
27=== modified file 'breezy/bzr/workingtree.py'
28--- breezy/bzr/workingtree.py 2017-12-22 16:24:08 +0000
29+++ breezy/bzr/workingtree.py 2018-02-15 22:17:55 +0000
30@@ -943,7 +943,7 @@
31 self.add_parent_tree_id(parent_id)
32 other_tree.controldir.retire_bzrdir()
33
34- def extract(self, file_id, format=None):
35+ def extract(self, sub_path, file_id=None, format=None):
36 """Extract a subtree from this tree.
37
38 A new branch will be created, relative to the path for this tree.
39@@ -958,7 +958,6 @@
40
41 with self.lock_tree_write():
42 self.flush()
43- sub_path = self.id2path(file_id)
44 branch_transport = mkdirs(sub_path)
45 if format is None:
46 format = self.controldir.cloning_metadir()
47@@ -985,6 +984,8 @@
48 # FIXME: Support nested trees
49 my_inv = self.root_inventory
50 child_inv = inventory.Inventory(root_id=None)
51+ if file_id is None:
52+ file_id = self.path2id(sub_path)
53 new_root = my_inv[file_id]
54 my_inv.remove_recursive_id(file_id)
55 new_root.parent_id = None
56
57=== modified file 'breezy/ignores.py'
58--- breezy/ignores.py 2017-11-12 13:31:49 +0000
59+++ breezy/ignores.py 2018-02-15 22:17:55 +0000
60@@ -225,5 +225,5 @@
61 finally:
62 f.close()
63
64- if not tree.path2id(breezy.IGNORE_FILENAME):
65+ if not tree.is_versioned(breezy.IGNORE_FILENAME):
66 tree.add([breezy.IGNORE_FILENAME])
67
68=== modified file 'breezy/plugins/fastimport/tests/test_generic_processor.py'
69--- breezy/plugins/fastimport/tests/test_generic_processor.py 2018-01-22 02:23:22 +0000
70+++ breezy/plugins/fastimport/tests/test_generic_processor.py 2018-02-15 22:17:55 +0000
71@@ -173,14 +173,12 @@
72 str(expected_kind_changed_entry), kind_changed_files))
73
74 def assertContent(self, branch, tree, path, content):
75- file_id = tree.path2id(path)
76 with branch.lock_read():
77- self.assertEqual(tree.get_file_text(path, file_id), content)
78+ self.assertEqual(tree.get_file_text(path), content)
79
80 def assertSymlinkTarget(self, branch, tree, path, target):
81- file_id = tree.path2id(path)
82 with branch.lock_read():
83- self.assertEqual(tree.get_symlink_target(path, file_id), target)
84+ self.assertEqual(tree.get_symlink_target(path), target)
85
86 def assertExecutable(self, branch, tree, path, executable):
87 with branch.lock_read():
88
89=== modified file 'breezy/rename_map.py'
90--- breezy/rename_map.py 2017-11-12 17:53:35 +0000
91+++ breezy/rename_map.py 2018-02-15 22:17:55 +0000
92@@ -146,7 +146,7 @@
93 while True:
94 child = path
95 path = osutils.dirname(path)
96- if self.tree.path2id(path) is not None:
97+ if self.tree.is_versioned(path):
98 break
99 required_parents.setdefault(path, []).append(child)
100 require_ids = {}
101
102=== modified file 'breezy/tests/__init__.py'
103--- breezy/tests/__init__.py 2017-11-12 13:53:51 +0000
104+++ breezy/tests/__init__.py 2018-02-15 22:17:55 +0000
105@@ -2865,7 +2865,7 @@
106 for p in path:
107 self.assertInWorkingTree(p, tree=tree)
108 else:
109- self.assertIsNot(tree.path2id(path), None,
110+ self.assertTrue(tree.is_versioned(path),
111 path+' not in working tree.')
112
113 def assertNotInWorkingTree(self, path, root_path='.', tree=None):
114@@ -2876,7 +2876,7 @@
115 for p in path:
116 self.assertNotInWorkingTree(p, tree=tree)
117 else:
118- self.assertIs(tree.path2id(path), None, path+' in working tree.')
119+ self.assertFalse(tree.is_versioned(path), path+' in working tree.')
120
121
122 class TestCaseWithTransport(TestCaseInTempDir):
123
124=== modified file 'breezy/tests/blackbox/test_mv.py'
125--- breezy/tests/blackbox/test_mv.py 2017-11-12 13:53:51 +0000
126+++ breezy/tests/blackbox/test_mv.py 2018-02-15 22:17:55 +0000
127@@ -453,8 +453,8 @@
128 self.assertEqual(out, '')
129 self.assertEqual(err, 'a => b\nc => d\n')
130 tree = workingtree.WorkingTree.open('tree')
131- self.assertIsNot(None, tree.path2id('b'))
132- self.assertIsNot(None, tree.path2id('d'))
133+ self.assertTrue(tree.is_versioned('b'))
134+ self.assertTrue(tree.is_versioned('d'))
135
136 def test_mv_auto_one_path(self):
137 self.make_abcd_tree()
138@@ -462,8 +462,8 @@
139 self.assertEqual(out, '')
140 self.assertEqual(err, 'a => b\nc => d\n')
141 tree = workingtree.WorkingTree.open('tree')
142- self.assertIsNot(None, tree.path2id('b'))
143- self.assertIsNot(None, tree.path2id('d'))
144+ self.assertTrue(tree.is_versioned('b'))
145+ self.assertTrue(tree.is_versioned('d'))
146
147 def test_mv_auto_two_paths(self):
148 self.make_abcd_tree()
149@@ -477,8 +477,8 @@
150 self.assertEqual(out, '')
151 self.assertEqual(err, 'a => b\nc => d\n')
152 tree = workingtree.WorkingTree.open('tree')
153- self.assertIsNot(None, tree.path2id('a'))
154- self.assertIsNot(None, tree.path2id('c'))
155+ self.assertTrue(tree.is_versioned('a'))
156+ self.assertTrue(tree.is_versioned('c'))
157
158 def test_mv_no_auto_dry_run(self):
159 self.make_abcd_tree()
160
161=== modified file 'breezy/tests/blackbox/test_remove.py'
162--- breezy/tests/blackbox/test_remove.py 2017-11-12 13:53:51 +0000
163+++ breezy/tests/blackbox/test_remove.py 2018-02-15 22:17:55 +0000
164@@ -106,7 +106,7 @@
165 tree.commit('save foo and bar')
166 os.unlink('bar')
167 self.run_bzr(['rm'])
168- self.assertEqual(None, tree.path2id('bar'))
169+ self.assertFalse(tree.is_versioned('bar'))
170 # Running rm with a deleted file does not error.
171 out, err = self.run_bzr(['rm'])
172 self.assertEqual('', out)
173
174=== modified file 'breezy/tests/blackbox/test_repair_workingtree.py'
175--- breezy/tests/blackbox/test_repair_workingtree.py 2017-08-26 13:58:53 +0000
176+++ breezy/tests/blackbox/test_repair_workingtree.py 2018-02-15 22:17:55 +0000
177@@ -65,10 +65,10 @@
178 def test_repair_forced(self):
179 tree = self.make_initial_tree()
180 tree.rename_one('dir', 'alt_dir')
181- self.assertIsNot(None, tree.path2id('alt_dir'))
182+ self.assertTrue(tree.is_versioned('alt_dir'))
183 self.run_bzr('repair-workingtree -d tree --force')
184 # This requires the tree has reloaded the working state
185- self.assertIs(None, tree.path2id('alt_dir'))
186+ self.assertFalse(tree.is_versioned('alt_dir'))
187 self.assertPathExists('tree/alt_dir')
188
189 def test_repair_corrupted_dirstate(self):
190
191=== modified file 'breezy/tests/per_intertree/__init__.py'
192--- breezy/tests/per_intertree/__init__.py 2017-11-12 13:53:51 +0000
193+++ breezy/tests/per_intertree/__init__.py 2018-02-15 22:17:55 +0000
194@@ -62,7 +62,7 @@
195 raise tests.TestNotApplicable('cannot represent unversioned files')
196
197 def not_applicable_if_missing_in(self, relpath, tree):
198- if not tree.path2id(relpath):
199+ if not tree.is_versioned(relpath):
200 # The locked test trees conversion could not preserve the missing
201 # file status. This is normal (e.g. InterDirstateTree falls back
202 # to InterTree if the basis is not a DirstateRevisionTree, and
203
204=== modified file 'breezy/tests/per_tree/test_test_trees.py'
205--- breezy/tests/per_tree/test_test_trees.py 2018-02-03 13:39:29 +0000
206+++ breezy/tests/per_tree/test_test_trees.py 2018-02-15 22:17:55 +0000
207@@ -49,6 +49,9 @@
208 self.assertEqual(
209 {'', 'a', 'b', 'b/c'},
210 set(tree.all_versioned_paths()))
211+ self.assertTrue(tree.is_versioned('a'))
212+ self.assertTrue(tree.is_versioned('b'))
213+ self.assertTrue(tree.is_versioned('b/c'))
214 self.assertEqual(
215 [(p, tree.path2id(p)) for p in ['', 'a', 'b', 'b/c']],
216 [(path, node.file_id) for path, node in tree.iter_entries_by_dir()])
217
218=== modified file 'breezy/tests/per_tree/test_tree.py'
219--- breezy/tests/per_tree/test_tree.py 2018-01-12 08:52:43 +0000
220+++ breezy/tests/per_tree/test_tree.py 2018-02-15 22:17:55 +0000
221@@ -116,6 +116,10 @@
222 if root_id is not None:
223 self.assertIsInstance(root_id, str)
224
225+ def test_is_versioned(self):
226+ self.assertTrue(tree.is_versioned(''))
227+ self.assertFalse(tree.is_versioned('blah'))
228+
229
230 class TestFileIds(TestCaseWithTree):
231
232@@ -124,13 +128,10 @@
233 work_tree = self.make_branch_and_tree('wt')
234 tree = self.get_tree_no_parents_abc_content(work_tree)
235 a_id = tree.path2id('a')
236- tree.lock_read()
237- try:
238+ with tree.lock_read():
239 self.assertEqual(u'a', tree.id2path(a_id))
240 # other ids give an error- don't return None for this case
241 self.assertRaises(errors.NoSuchId, tree.id2path, 'a')
242- finally:
243- tree.unlock()
244
245 def test_all_file_ids(self):
246 work_tree = self.make_branch_and_tree('wt')
247
248=== modified file 'breezy/tests/per_workingtree/test_get_file_mtime.py'
249--- breezy/tests/per_workingtree/test_get_file_mtime.py 2018-01-12 08:52:43 +0000
250+++ breezy/tests/per_workingtree/test_get_file_mtime.py 2018-02-15 22:17:55 +0000
251@@ -111,9 +111,6 @@
252 one_id = tree.path2id('one')
253
254 os.remove('tree/one')
255- tree.lock_read()
256- try:
257+ with tree.lock_read():
258 self.assertRaises(errors.NoSuchFile, tree.get_file_mtime, 'one')
259- finally:
260- tree.unlock()
261
262
263=== modified file 'breezy/tests/per_workingtree/test_inv.py'
264--- breezy/tests/per_workingtree/test_inv.py 2017-11-24 09:25:13 +0000
265+++ breezy/tests/per_workingtree/test_inv.py 2018-02-15 22:17:55 +0000
266@@ -68,7 +68,7 @@
267 wt.add(['foo', 'foo/bar'], ['foo-id', 'bar-id'])
268 wt.apply_inventory_delta([('foo', None, 'foo-id', None),
269 ('foo/bar', None, 'bar-id', None)])
270- self.assertIs(None, wt.path2id('foo'))
271+ self.assertFalse(wt.is_versioned('foo'))
272
273 def test_rename_dir_with_children(self):
274 wt = self.make_branch_and_tree('.')
275
276=== modified file 'breezy/tests/per_workingtree/test_read_working_inventory.py'
277--- breezy/tests/per_workingtree/test_read_working_inventory.py 2017-06-10 01:39:46 +0000
278+++ breezy/tests/per_workingtree/test_read_working_inventory.py 2018-02-15 22:17:55 +0000
279@@ -41,8 +41,7 @@
280 "non-inventory working trees")
281 # prepare for a series of changes that will modify the
282 # inventory
283- tree.lock_write()
284- try:
285+ with tree.lock_write():
286 tree.set_root_id('new-root')
287 # having dirtied the inventory, we can now expect an
288 # InventoryModified exception when doing a read_working_inventory()
289@@ -53,5 +52,3 @@
290 pass
291 else:
292 self.assertEqual('new-root', tree.path2id(''))
293- finally:
294- tree.unlock()
295
296=== modified file 'breezy/tests/per_workingtree/test_smart_add.py'
297--- breezy/tests/per_workingtree/test_smart_add.py 2018-02-03 13:39:29 +0000
298+++ breezy/tests/per_workingtree/test_smart_add.py 2018-02-15 22:17:55 +0000
299@@ -84,7 +84,7 @@
300 wt.unlock()
301 # and the disk state should be the same - reopen to check.
302 wt = wt.controldir.open_workingtree()
303- self.assertEqual(wt.path2id('file'), None)
304+ self.assertFalse(wt.is_versioned('file'))
305
306 def test_add_dot_from_root(self):
307 """Test adding . from the root of the tree."""
308@@ -93,7 +93,7 @@
309 wt = self.make_branch_and_tree('.')
310 wt.smart_add((u".",))
311 for path in paths:
312- self.assertNotEqual(wt.path2id(path), None)
313+ self.assertTrue(wt.is_versioned(path))
314
315 def test_skip_nested_trees(self):
316 """Test smart-adding a nested tree ignors it and warns."""
317@@ -104,7 +104,7 @@
318 warnings.append(args[0] % args[1:])
319 self.overrideAttr(trace, 'warning', warning)
320 wt.smart_add((u".",))
321- self.assertIs(wt.path2id("nested"), None)
322+ self.assertFalse(wt.is_versioned("nested"))
323 self.assertEqual(
324 ['skipping nested tree %r' % nested_wt.basedir], warnings)
325
326@@ -115,7 +115,7 @@
327 wt = self.make_branch_and_tree('.')
328 wt.smart_add((u".",))
329 for path in paths:
330- self.assertNotEqual(wt.path2id(path), None)
331+ self.assertTrue(wt.is_versioned(path))
332
333 def test_add_tree_from_above_tree(self):
334 """Test adding a tree from above the tree."""
335@@ -126,7 +126,7 @@
336 wt = self.make_branch_and_tree('branch')
337 wt.smart_add(("branch",))
338 for path in paths:
339- self.assertNotEqual(wt.path2id(path), None)
340+ self.assertTrue(wt.is_versioned(path))
341
342 def test_add_above_tree_preserves_tree(self):
343 """Test nested trees are not affect by an add above them."""
344@@ -144,13 +144,13 @@
345 child_tree = self.make_branch_and_tree('original/child')
346 wt.smart_add((".",))
347 for path in paths:
348- self.assertNotEqual((path, wt.path2id(path)),
349- (path, None))
350+ self.assertNotEqual((path, wt.is_versioned(path)),
351+ (path, False))
352 for path in full_child_paths:
353- self.assertEqual((path, wt.path2id(path)),
354- (path, None))
355+ self.assertEqual((path, wt.is_versioned(path)),
356+ (path, False))
357 for path in child_paths:
358- self.assertEqual(child_tree.path2id(path), None)
359+ self.assertFalse(child_tree.is_versioned(path))
360
361 def test_add_paths(self):
362 """Test smart-adding a list of paths."""
363@@ -159,7 +159,7 @@
364 wt = self.make_branch_and_tree('.')
365 wt.smart_add(paths)
366 for path in paths:
367- self.assertNotEqual(wt.path2id(path), None)
368+ self.assertTrue(wt.is_versioned(path))
369
370 def test_add_ignored_nested_paths(self):
371 """Test smart-adding a list of paths which includes ignored ones."""
372@@ -170,8 +170,7 @@
373 self.build_tree(tree_shape)
374 wt.smart_add(add_paths)
375 for path in expected_paths:
376- self.assertNotEqual(wt.path2id(path), None,
377- "No id added for %s" % path)
378+ self.assertTrue(wt.is_versioned(path), "No id added for %s" % path)
379
380 def test_add_non_existant(self):
381 """Test smart-adding a file that does not exist."""
382@@ -206,10 +205,10 @@
383 wt.smart_add(['file1', 'file2', 'dir1', 'dir2'])
384
385 for path in added_paths:
386- self.assertNotEqual(None, wt.path2id(path.rstrip('/')),
387+ self.assertTrue(wt.is_versioned(path.rstrip('/')),
388 'Failed to add path: %s' % (path,))
389 for path in not_added:
390- self.assertEqual(None, wt.path2id(path.rstrip('/')),
391+ self.assertFalse(wt.is_versioned(path.rstrip('/')),
392 'Accidentally added path: %s' % (path,))
393
394 def test_add_file_in_unknown_dir(self):
395
396=== modified file 'breezy/tests/per_workingtree/test_symlinks.py'
397--- breezy/tests/per_workingtree/test_symlinks.py 2017-11-12 20:07:32 +0000
398+++ breezy/tests/per_workingtree/test_symlinks.py 2018-02-15 22:17:55 +0000
399@@ -42,8 +42,8 @@
400 ('tree/link@', 'target'),
401 ])
402 tree.smart_add(['tree/link'])
403- self.assertIsNot(None, tree.path2id('link'))
404- self.assertIs(None, tree.path2id('target'))
405+ self.assertTrue(tree.is_versioned('link'))
406+ self.assertFalse(tree.is_versioned('target'))
407 self.assertEqual('symlink', tree.kind('link'))
408
409 def test_smart_add_symlink_pointing_outside(self):
410@@ -52,8 +52,8 @@
411 ('tree/link@', '../../../../target'),
412 ])
413 tree.smart_add(['tree/link'])
414- self.assertIsNot(None, tree.path2id('link'))
415- self.assertIs(None, tree.path2id('target'))
416+ self.assertTrue(tree.is_versioned('link'))
417+ self.assertFalse(tree.is_versioned('target'))
418 self.assertEqual('symlink', tree.kind('link'))
419
420 def test_add_file_under_symlink(self):
421@@ -70,10 +70,10 @@
422 ([u'dir', u'dir/file'], {}))
423 # should add the actual parent directory, not the apparent parent
424 # (which is actually a symlink)
425- self.assertTrue(tree.path2id('dir/file'))
426- self.assertTrue(tree.path2id('dir'))
427- self.assertIs(None, tree.path2id('link'))
428- self.assertIs(None, tree.path2id('link/file'))
429+ self.assertTrue(tree.is_versioned('dir/file'))
430+ self.assertTrue(tree.is_versioned('dir'))
431+ self.assertFalse(tree.is_versioned('link'))
432+ self.assertFalse(tree.is_versioned('link/file'))
433
434
435 class TestKindChanges(TestCaseWithWorkingTree):
436
437=== modified file 'breezy/tests/per_workingtree/test_unversion.py'
438--- breezy/tests/per_workingtree/test_unversion.py 2017-12-22 16:24:08 +0000
439+++ breezy/tests/per_workingtree/test_unversion.py 2018-02-15 22:17:55 +0000
440@@ -61,7 +61,9 @@
441 c_id = tree.path2id('c')
442 # within a lock unversion should take effect
443 tree.lock_write()
444+ self.assertTrue(tree.is_versioned('a'))
445 tree.unversion(['a', 'b'])
446+ self.assertFalse(tree.is_versioned('a'))
447 self.assertFalse(tree.has_id(a_id))
448 self.assertFalse(tree.has_id(b_id))
449 self.assertTrue(tree.has_id(c_id))
450@@ -111,8 +113,7 @@
451 b_id = tree.path2id('a/b')
452 c_id = tree.path2id('a/c')
453 d_id = tree.path2id('d')
454- tree.lock_write()
455- try:
456+ with tree.lock_write():
457 tree.unversion(['a/b', 'a'])
458 self.assertFalse(tree.has_id(a_id))
459 self.assertFalse(tree.has_id(b_id))
460@@ -123,8 +124,6 @@
461 self.assertTrue(tree.has_filename('a/b'))
462 self.assertTrue(tree.has_filename('a/c'))
463 self.assertTrue(tree.has_filename('d'))
464- finally:
465- tree.unlock()
466
467 def test_unversion_renamed(self):
468 tree = self.make_branch_and_tree('a')
469
470=== modified file 'breezy/tests/per_workingtree/test_workingtree.py'
471--- breezy/tests/per_workingtree/test_workingtree.py 2018-01-15 06:07:39 +0000
472+++ breezy/tests/per_workingtree/test_workingtree.py 2018-02-15 22:17:55 +0000
473@@ -420,9 +420,9 @@
474 self.assertFalse(cloned_transport.has('deleted'))
475 self.assertTrue(cloned_transport.has('added'))
476 self.assertFalse(cloned_transport.has('notadded'))
477- self.assertIsNot(None, cloned.path2id('added'))
478- self.assertEqual(None, cloned.path2id('deleted'))
479- self.assertEqual(None, cloned.path2id('notadded'))
480+ self.assertTrue(cloned.is_versioned('added'))
481+ self.assertFalse(cloned.is_versioned('deleted'))
482+ self.assertFalse(cloned.is_versioned('notadded'))
483
484 def test_basis_tree_returns_last_revision(self):
485 wt = self.make_branch_and_tree('.')
486@@ -687,15 +687,12 @@
487 # merge_modified stores a map from file id to hash
488 tree = self.make_branch_and_tree('tree')
489 self.build_tree_contents([('tree/somefile', 'hello')])
490- tree.lock_write()
491- try:
492+ with tree.lock_write():
493 tree.add(['somefile'])
494 d = {tree.path2id('somefile'): osutils.sha_string('hello')}
495 tree.set_merge_modified(d)
496 mm = tree.merge_modified()
497 self.assertEqual(mm, d)
498- finally:
499- tree.unlock()
500 mm = tree.merge_modified()
501 self.assertEqual(mm, d)
502
503@@ -971,7 +968,6 @@
504 'nonexistant')
505 self.build_tree(['file'])
506 tree.add('file')
507- file_id = tree.path2id('file')
508 tree.commit('foo')
509 tree.remove('file')
510 self.assertRaises(errors.NoSuchFile, tree.get_file_sha1,
511
512=== modified file 'breezy/tests/test_bundle.py'
513--- breezy/tests/test_bundle.py 2017-11-24 09:25:13 +0000
514+++ breezy/tests/test_bundle.py 2018-02-15 22:17:55 +0000
515@@ -219,14 +219,14 @@
516 self.assertEqual(btree.path2id("grandparent/parent"), "b")
517 self.assertEqual(btree.path2id("grandparent/parent/file"), "c")
518
519- self.assertTrue(btree.path2id("grandparent2") is None)
520- self.assertTrue(btree.path2id("grandparent2/parent") is None)
521- self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
522+ self.assertIs(btree.path2id("grandparent2"), None)
523+ self.assertIs(btree.path2id("grandparent2/parent"), None)
524+ self.assertIs(btree.path2id("grandparent2/parent/file"), None)
525
526 btree.note_rename("grandparent", "grandparent2")
527- self.assertTrue(btree.old_path("grandparent") is None)
528- self.assertTrue(btree.old_path("grandparent/parent") is None)
529- self.assertTrue(btree.old_path("grandparent/parent/file") is None)
530+ self.assertIs(btree.old_path("grandparent"), None)
531+ self.assertIs(btree.old_path("grandparent/parent"), None)
532+ self.assertIs(btree.old_path("grandparent/parent/file"), None)
533
534 self.assertEqual(btree.id2path("a"), "grandparent2")
535 self.assertEqual(btree.id2path("b"), "grandparent2/parent")
536@@ -351,7 +351,7 @@
537 self.assertEqual(btree.get_file(btree.id2path("c")).read(), "Hello\n")
538 btree.note_deletion("grandparent/parent/file")
539 self.assertTrue(btree.id2path("c") is None)
540- self.assertTrue(btree.path2id("grandparent/parent/file") is None)
541+ self.assertFalse(btree.is_versioned("grandparent/parent/file"))
542
543 def sorted_ids(self, tree):
544 ids = sorted(tree.all_file_ids())
545
546=== modified file 'breezy/tests/test_commit.py'
547--- breezy/tests/test_commit.py 2017-11-13 22:52:33 +0000
548+++ breezy/tests/test_commit.py 2018-02-15 22:17:55 +0000
549@@ -89,7 +89,6 @@
550 with open('hello', 'w') as f: f.write('hello world')
551 wt.add('hello')
552 rev1 = wt.commit(message='add hello')
553- file_id = wt.path2id('hello')
554
555 with open('hello', 'w') as f: f.write('version 2')
556 rev2 = wt.commit(message='commit 2')
557@@ -616,12 +615,9 @@
558 tree.remove(['a', 'b'])
559 tree.commit('removed a', specific_files='a')
560 basis = tree.basis_tree()
561- tree.lock_read()
562- try:
563- self.assertIs(None, basis.path2id('a'))
564- self.assertFalse(basis.path2id('b') is None)
565- finally:
566- tree.unlock()
567+ with tree.lock_read():
568+ self.assertFalse(basis.is_versioned('a'))
569+ self.assertTrue(basis.is_versioned('b'))
570
571 def test_commit_saves_1ms_timestamp(self):
572 """Passing in a timestamp is saved with 1ms resolution"""
573
574=== modified file 'breezy/tests/test_inv.py'
575--- breezy/tests/test_inv.py 2018-01-14 05:14:06 +0000
576+++ breezy/tests/test_inv.py 2018-02-15 22:17:55 +0000
577@@ -622,7 +622,7 @@
578 inv.add(file1)
579 delta = [(u'path', None, 'file-id', None)]
580 res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
581- self.assertEqual(None, res_inv.path2id('path'))
582+ self.assertFalse(res_inv.is_versioned('path'))
583 self.assertRaises(errors.NoSuchId, res_inv.id2path, 'file-id')
584
585 def test_rename_file(self):
586@@ -632,7 +632,7 @@
587 file2 = self.make_file_ie(name='path2', parent_id=inv.root.file_id)
588 delta = [(u'path', 'path2', 'file-id', file2)]
589 res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
590- self.assertEqual(None, res_inv.path2id('path'))
591+ self.assertFalse(res_inv.is_versioned('path'))
592 self.assertEqual('file-id', res_inv.path2id('path2'))
593
594 def test_replaced_at_new_path(self):
595@@ -676,7 +676,7 @@
596 res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
597 # The file should be accessible under the new path
598 self.assertEqual('file-id-1', res_inv.path2id('dir2/name1'))
599- self.assertEqual(None, res_inv.path2id('dir2/name2'))
600+ self.assertFalse(res_inv.is_versioned('dir2/name2'))
601 self.assertEqual('file-id-2', res_inv.path2id('name2'))
602
603 def test_is_root(self):
604
605=== modified file 'breezy/tests/test_merge.py'
606--- breezy/tests/test_merge.py 2017-11-24 09:25:13 +0000
607+++ breezy/tests/test_merge.py 2018-02-15 22:17:55 +0000
608@@ -2300,7 +2300,7 @@
609 wt.set_parent_ids(['D-id'])
610 wt.branch.set_last_revision_info(3, 'D-id')
611 wt.revert()
612- self.assertIs(None, wt.path2id('foo'))
613+ self.assertFalse(wt.is_versioned('foo'))
614 conflicts = wt.merge_from_branch(wt.branch, to_revision='F-id')
615 self.assertEqual(0, conflicts)
616 self.assertEqual('foo-id', wt.path2id('foo'))
617
618=== modified file 'breezy/tests/test_transform.py'
619--- breezy/tests/test_transform.py 2017-11-12 20:07:32 +0000
620+++ breezy/tests/test_transform.py 2018-02-15 22:17:55 +0000
621@@ -920,7 +920,7 @@
622 self.assertEqual([NonDirectoryParent('Created directory', 'parent.new',
623 'parent-id')], cooked_conflicts)
624 tt.apply()
625- self.assertEqual(None, self.wt.path2id('parent'))
626+ self.assertFalse(self.wt.is_versioned('parent'))
627 self.assertEqual('parent-id', self.wt.path2id('parent.new'))
628
629 def test_resolve_conflicts_wrong_new_parent_kind(self):
630@@ -936,7 +936,7 @@
631 self.assertEqual({('non-directory parent', 'Created directory',
632 'new-3')}, raw_conflicts)
633 tt.apply()
634- self.assertEqual(None, self.wt.path2id('parent'))
635+ self.assertFalse(self.wt.is_versioned('parent'))
636 self.assertEqual('parent-id', self.wt.path2id('parent.new'))
637
638 def test_resolve_conflicts_wrong_parent_kind_unversioned(self):
639@@ -950,8 +950,8 @@
640 tt.create_file('contents', parent_id)
641 resolve_conflicts(tt)
642 tt.apply()
643- self.assertIs(None, self.wt.path2id('parent'))
644- self.assertIs(None, self.wt.path2id('parent.new'))
645+ self.assertFalse(self.wt.is_versioned('parent'))
646+ self.assertFalse(self.wt.is_versioned('parent.new'))
647
648 def test_resolve_conflicts_missing_parent(self):
649 wt = self.make_branch_and_tree('.')
650@@ -2896,7 +2896,7 @@
651 preview.unversion_file(preview.trans_id_file_id('deleted-id'))
652 preview_tree = preview.get_preview_tree()
653 self.assertEqual('unchanged-id', preview_tree.path2id('unchanged'))
654- self.assertIs(None, preview_tree.path2id('deleted'))
655+ self.assertFalse(preview_tree.is_versioned('deleted'))
656
657 def test_path2id_created(self):
658 tree = self.make_branch_and_tree('tree')
659@@ -2921,7 +2921,7 @@
660 preview.adjust_path('child', new_parent,
661 preview.trans_id_file_id('child-id'))
662 preview_tree = preview.get_preview_tree()
663- self.assertIs(None, preview_tree.path2id('old_parent/child'))
664+ self.assertFalse(preview_tree.is_versioned('old_parent/child'))
665 self.assertEqual('child-id', preview_tree.path2id('new_parent/child'))
666
667 def test_path2id_renamed_parent(self):
668@@ -2934,7 +2934,7 @@
669 preview.adjust_path('new_name', preview.root,
670 preview.trans_id_file_id('parent-id'))
671 preview_tree = preview.get_preview_tree()
672- self.assertIs(None, preview_tree.path2id('old_name/child'))
673+ self.assertFalse(preview_tree.is_versioned('old_name/child'))
674 self.assertEqual('child-id', preview_tree.path2id('new_name/child'))
675
676 def assertMatchingIterEntries(self, tt, specific_file_ids=None):
677
678=== modified file 'breezy/tests/test_uncommit.py'
679--- breezy/tests/test_uncommit.py 2017-06-10 00:17:06 +0000
680+++ breezy/tests/test_uncommit.py 2018-02-15 22:17:55 +0000
681@@ -51,7 +51,7 @@
682 # The file should not be removed
683 self.assertPathExists('tree/two')
684 # And it should still be listed as added
685- self.assertIsNot(None, tree.path2id('two'))
686+ self.assertTrue(tree.is_versioned('two'))
687
688 def test_uncommit_bound(self):
689 tree, history = self.make_linear_tree()
690
691=== modified file 'breezy/tests/test_upstream_import.py'
692--- breezy/tests/test_upstream_import.py 2017-11-12 20:07:32 +0000
693+++ breezy/tests/test_upstream_import.py 2018-02-15 22:17:55 +0000
694@@ -233,8 +233,8 @@
695 tree.lock_write()
696 try:
697 importer(tree, archive_file)
698- self.assertTrue(tree.path2id('README') is not None)
699- self.assertTrue(tree.path2id('FEEDME') is not None)
700+ self.assertTrue(tree.is_versioned('README'))
701+ self.assertTrue(tree.is_versioned('FEEDME'))
702 self.assertTrue(os.path.isfile(tree.abspath('README')))
703 self.assertEqual(tree.stored_kind('README'), 'file')
704 self.assertEqual(tree.stored_kind('FEEDME'), 'file')
705@@ -246,7 +246,7 @@
706 warnings.simplefilter('ignore')
707 archive_file = self.make_archive2(builder, subdir)
708 importer(tree, archive_file)
709- self.assertTrue(tree.path2id('README') is not None)
710+ self.assertTrue(tree.is_versioned('README'))
711 # Ensure the second version of the file is used.
712 self.assertEqual(tree.get_file_text('README'), 'Wow?')
713 self.assertTrue(not os.path.exists(tree.abspath('FEEDME')))
714@@ -258,13 +258,13 @@
715 tar_file = self.make_messed_tar()
716 tree = BzrDir.create_standalone_workingtree('tree')
717 import_tar(tree, tar_file)
718- self.assertTrue(tree.path2id('project-0.1/README') is not None)
719+ self.assertTrue(tree.is_versioned('project-0.1/README'))
720
721 def test_untar_gzip(self):
722 tar_file = self.make_tar(mode='w:gz')
723 tree = BzrDir.create_standalone_workingtree('tree')
724 import_tar(tree, tar_file)
725- self.assertTrue(tree.path2id('README') is not None)
726+ self.assertTrue(tree.is_versioned('README'))
727
728 def test_no_crash_with_bzrdir(self):
729 tar_file = self.make_tar_with_bzrdir()
730
731=== modified file 'breezy/tests/test_workingtree_4.py'
732--- breezy/tests/test_workingtree_4.py 2017-11-19 18:35:20 +0000
733+++ breezy/tests/test_workingtree_4.py 2018-02-15 22:17:55 +0000
734@@ -303,7 +303,7 @@
735 state.update_basis_by_delta = log_update_basis_by_delta
736 basis = tree.basis_tree()
737 self.assertEqual('a-id', basis.path2id('a'))
738- self.assertEqual(None, basis.path2id('b'))
739+ self.assertFalse(basis.is_versioned('b'))
740 def fail_set_parent_trees(trees, ghosts):
741 raise AssertionError('dirstate.set_parent_trees() was called')
742 state.set_parent_trees = fail_set_parent_trees
743@@ -341,7 +341,7 @@
744 # Re-open with the new reference
745 wt = wt.controldir.open_workingtree()
746 wt.set_parent_trees([('C', b_c.repository.revision_tree('C'))])
747- self.assertEqual(None, wt.basis_tree().path2id('b'))
748+ self.assertFalse(wt.basis_tree().is_versioned('b'))
749
750 def test_new_dirstate_on_new_lock(self):
751 # until we have detection for when a dirstate can be reused, we
752
753=== modified file 'breezy/tree.py'
754--- breezy/tree.py 2018-01-12 08:52:43 +0000
755+++ breezy/tree.py 2018-02-15 22:17:55 +0000
756@@ -533,6 +533,14 @@
757 """Return the id for path in this tree."""
758 raise NotImplementedError(self.path2id)
759
760+ def is_versioned(self, path):
761+ """Check whether path is versioned.
762+
763+ :param path: Path to check
764+ :return: boolean
765+ """
766+ return (self.path2id(path) is not None)
767+
768 def paths2ids(self, paths, trees=[], require_versioned=True):
769 """Return all the ids that can be reached by walking from paths.
770
771
772=== modified file 'breezy/upstream_import.py'
773--- breezy/upstream_import.py 2017-09-26 00:55:04 +0000
774+++ breezy/upstream_import.py 2018-02-15 22:17:55 +0000
775@@ -182,7 +182,7 @@
776
777
778 def do_directory(tt, trans_id, tree, relative_path, path):
779- if isdir(path) and tree.path2id(relative_path) is not None:
780+ if isdir(path) and tree.is_versioned(relative_path):
781 tt.cancel_deletion(trans_id)
782 else:
783 tt.create_directory(trans_id)
784
785=== modified file 'breezy/workingtree.py'
786--- breezy/workingtree.py 2018-01-15 06:07:39 +0000
787+++ breezy/workingtree.py 2018-02-15 22:17:55 +0000
788@@ -813,7 +813,7 @@
789 # checkout in a subdirectory. This can be avoided by not adding
790 # it. mbp 20070306
791
792- def extract(self, file_id, format=None):
793+ def extract(self, path, file_id=None, format=None):
794 """Extract a subtree from this tree.
795
796 A new branch will be created, relative to the path for this tree.

Subscribers

People subscribed via source and target branches