/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2006-2009, 2011, 2012, 2016 Canonical Ltd
1551.9.21 by Aaron Bentley
Fix copyright statements
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1551.9.21 by Aaron Bentley
Fix copyright statements
16
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
17
from breezy import (
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
18
    errors,
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
19
    conflicts,
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
20
    osutils,
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
21
    revisiontree,
2255.2.180 by Martin Pool
merge dirstate
22
    tests,
6670.4.3 by Jelmer Vernooij
Fix more imports.
23
    )
7358.4.1 by Jelmer Vernooij
Add Tree.get_nested_tree.
24
from breezy.tree import MissingNestedTree
6670.4.3 by Jelmer Vernooij
Fix more imports.
25
from breezy.bzr import (
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
26
    workingtree_4,
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
27
    )
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
28
from breezy.tests import TestSkipped
29
from breezy.tests.per_tree import TestCaseWithTree
5967.7.1 by Martin Pool
Deprecate __contains__ on Tree and Inventory
30
1551.9.16 by Aaron Bentley
Implement Tree.annotate_iter for RevisionTree and WorkingTree
31
32
class TestAnnotate(TestCaseWithTree):
2255.2.69 by John Arbash Meinel
Implement annotate_iter, get_revision_id, and walkdirs so that all tree_implementations now pass
33
1551.9.16 by Aaron Bentley
Implement Tree.annotate_iter for RevisionTree and WorkingTree
34
    def test_annotate(self):
35
        work_tree = self.make_branch_and_tree('wt')
36
        tree = self.get_tree_no_parents_abc_content(work_tree)
7018.3.2 by Jelmer Vernooij
Fix some git tests.
37
        tree_revision = getattr(tree, 'get_revision_id', lambda: b'current:')()
2255.2.69 by John Arbash Meinel
Implement annotate_iter, get_revision_id, and walkdirs so that all tree_implementations now pass
38
        tree.lock_read()
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
39
        self.addCleanup(tree.unlock)
6809.4.2 by Jelmer Vernooij
Swap arguments for annotate_iter.
40
        for revision, line in tree.annotate_iter('a'):
7018.3.2 by Jelmer Vernooij
Fix some git tests.
41
            self.assertEqual(b'contents of a\n', line)
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
42
            self.assertEqual(tree_revision, revision)
7018.3.2 by Jelmer Vernooij
Fix some git tests.
43
        tree_revision = getattr(tree, 'get_revision_id', lambda: b'random:')()
44
        for revision, line in tree.annotate_iter('a', default_revision=b'random:'):
45
            self.assertEqual(b'contents of a\n', line)
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
46
            self.assertEqual(tree_revision, revision)
47
48
1551.15.52 by Aaron Bentley
Tweak from review comments
49
class TestPlanFileMerge(TestCaseWithTree):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
50
1551.15.52 by Aaron Bentley
Tweak from review comments
51
    def test_plan_file_merge(self):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
52
        work_a = self.make_branch_and_tree('wta')
6855.3.1 by Jelmer Vernooij
Several more fixes.
53
        self.build_tree_contents([('wta/file', b'a\nb\nc\nd\n')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
54
        work_a.add('file')
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
55
        work_a.commit('base version')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
56
        work_b = work_a.controldir.sprout('wtb').open_workingtree()
6855.3.1 by Jelmer Vernooij
Several more fixes.
57
        self.build_tree_contents([('wta/file', b'b\nc\nd\ne\n')])
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
58
        tree_a = self.workingtree_to_test_tree(work_a)
6861.2.3 by Jelmer Vernooij
Mark which merge types require plan_file_merge.
59
        if getattr(tree_a, 'plan_file_merge', None) is None:
7143.15.2 by Jelmer Vernooij
Run autopep8.
60
            raise tests.TestNotApplicable(
61
                'Tree does not support plan_file_merge')
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
62
        tree_a.lock_read()
63
        self.addCleanup(tree_a.unlock)
6855.3.1 by Jelmer Vernooij
Several more fixes.
64
        self.build_tree_contents([('wtb/file', b'a\nc\nd\nf\n')])
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
65
        tree_b = self.workingtree_to_test_tree(work_b)
66
        tree_b.lock_read()
67
        self.addCleanup(tree_b.unlock)
68
        self.assertEqual([
6973.11.7 by Jelmer Vernooij
Fix more tests.
69
            ('killed-a', b'a\n'),
70
            ('killed-b', b'b\n'),
71
            ('unchanged', b'c\n'),
72
            ('unchanged', b'd\n'),
73
            ('new-a', b'e\n'),
74
            ('new-b', b'f\n'),
7350.6.4 by Jelmer Vernooij
Drop file_id attribute from MergeHookParams and Tree.plan_file_merge.
75
        ], list(tree_a.plan_file_merge('file', tree_b)))
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
76
77
78
class TestReference(TestCaseWithTree):
79
80
    def skip_if_no_reference(self, tree):
81
        if not getattr(tree, 'supports_tree_reference', lambda: False)():
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
82
            raise tests.TestNotApplicable('Tree references not supported')
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
83
2100.3.27 by Aaron Bentley
Enable nested commits
84
    def create_nested(self):
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
85
        work_tree = self.make_branch_and_tree('wt')
7358.4.1 by Jelmer Vernooij
Add Tree.get_nested_tree.
86
        with work_tree.lock_write():
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
87
            self.skip_if_no_reference(work_tree)
88
            subtree = self.make_branch_and_tree('wt/subtree')
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
89
            subtree.commit('foo')
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
90
            work_tree.add_reference(subtree)
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
91
        tree = self._convert_tree(work_tree)
92
        self.skip_if_no_reference(tree)
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
93
        return tree, subtree
2100.3.27 by Aaron Bentley
Enable nested commits
94
95
    def test_get_reference_revision(self):
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
96
        tree, subtree = self.create_nested()
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
97
        tree.lock_read()
98
        self.addCleanup(tree.unlock)
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
99
        self.assertEqual(
100
            subtree.last_revision(),
101
            tree.get_reference_revision('subtree'))
2100.3.27 by Aaron Bentley
Enable nested commits
102
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
103
    def test_iter_references(self):
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
104
        tree, subtree = self.create_nested()
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
105
        tree.lock_read()
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
106
        self.addCleanup(tree.unlock)
6926.2.2 by Jelmer Vernooij
More fixes.
107
        self.assertEqual(
7350.2.1 by Jelmer Vernooij
Drop file_id return value from Tree.iter_references.
108
            [u'subtree'],
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
109
            list(tree.iter_references()))
2255.2.166 by Martin Pool
(broken) Add Tree.get_root_id() & test
110
7358.4.1 by Jelmer Vernooij
Add Tree.get_nested_tree.
111
    def test_get_nested_tree(self):
112
        tree, subtree = self.create_nested()
113
        try:
114
            changes = subtree.changes_from(tree.get_nested_tree('subtree'))
115
            self.assertFalse(changes.has_changed())
116
        except MissingNestedTree:
117
            # Also okay.
118
            pass
119
2255.2.166 by Martin Pool
(broken) Add Tree.get_root_id() & test
120
    def test_get_root_id(self):
121
        # trees should return some kind of root id; it can be none
122
        tree = self.make_branch_and_tree('tree')
123
        root_id = tree.get_root_id()
124
        if root_id is not None:
6973.11.7 by Jelmer Vernooij
Fix more tests.
125
            self.assertIsInstance(root_id, bytes)
2255.2.180 by Martin Pool
merge dirstate
126
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
127
    def test_is_versioned(self):
6856 by Jelmer Vernooij
Merge lp:~jelmer/brz/is-versioned.
128
        tree = self.make_branch_and_tree('tree')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
129
        self.assertTrue(tree.is_versioned(''))
130
        self.assertFalse(tree.is_versioned('blah'))
6861.1.1 by Jelmer Vernooij
More foreign branch test fixes.
131
        self.build_tree(['tree/dir/', 'tree/dir/file'])
132
        self.assertFalse(tree.is_versioned('dir'))
133
        self.assertFalse(tree.is_versioned('dir/'))
134
        tree.add(['dir', 'dir/file'])
135
        self.assertTrue(tree.is_versioned('dir'))
136
        self.assertTrue(tree.is_versioned('dir/'))
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
137
2255.2.180 by Martin Pool
merge dirstate
138
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
139
class TestFileIds(TestCaseWithTree):
140
141
    def test_id2path(self):
142
        # translate from file-id back to path
143
        work_tree = self.make_branch_and_tree('wt')
144
        tree = self.get_tree_no_parents_abc_content(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
145
        a_id = tree.path2id('a')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
146
        with tree.lock_read():
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
147
            self.assertEqual(u'a', tree.id2path(a_id))
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
148
            # other ids give an error- don't return None for this case
7045.4.1 by Jelmer Vernooij
Some brz-git fixes.
149
            self.assertRaises(errors.NoSuchId, tree.id2path, b'a')
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
150
3146.8.16 by Aaron Bentley
Updates from review
151
    def test_all_file_ids(self):
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
152
        work_tree = self.make_branch_and_tree('wt')
153
        tree = self.get_tree_no_parents_abc_content(work_tree)
154
        tree.lock_read()
155
        self.addCleanup(tree.unlock)
7170.3.1 by Jelmer Vernooij
Make Tree.all_file_ids optional.
156
        try:
157
            self.assertEqual(tree.all_file_ids(),
158
                             {tree.path2id('a'), tree.path2id(''),
159
                              tree.path2id('b'), tree.path2id('b/c')})
160
        except errors.UnsupportedOperation:
161
            raise tests.TestNotApplicable(
162
                'Tree does not support all_file_ids')
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
163
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
164
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
165
class TestStoredKind(TestCaseWithTree):
166
167
    def test_stored_kind(self):
168
        tree = self.make_branch_and_tree('tree')
169
        work_tree = self.make_branch_and_tree('wt')
170
        tree = self.get_tree_no_parents_abc_content(work_tree)
171
        tree.lock_read()
172
        self.addCleanup(tree.unlock)
6809.4.7 by Jelmer Vernooij
Swap arguments for get_symlink_target and kind/stored_kind.
173
        self.assertEqual('file', tree.stored_kind('a'))
174
        self.assertEqual('directory', tree.stored_kind('b'))
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
175
176
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
177
class TestFileContent(TestCaseWithTree):
178
179
    def test_get_file(self):
180
        work_tree = self.make_branch_and_tree('wt')
181
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
182
        a_id = tree.path2id('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
183
        tree.lock_read()
6437.20.6 by Martin Packman
Poke test_get_file in bt.per_tree.test_tree to be more careful about cleanup
184
        self.addCleanup(tree.unlock)
185
        # Test lookup without path works
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
186
        file_without_path = tree.get_file('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
187
        try:
6437.20.2 by Wouter van Heyst
close files returned by transport.get
188
            lines = file_without_path.readlines()
6973.6.1 by Jelmer Vernooij
More bees.
189
            self.assertEqual([b'foobar\n'], lines)
6437.20.6 by Martin Packman
Poke test_get_file in bt.per_tree.test_tree to be more careful about cleanup
190
        finally:
191
            file_without_path.close()
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
192
6977.2.1 by Jelmer Vernooij
Require that get_file implementations are contect managers, simplify file handling in transform.
193
    def test_get_file_context_manager(self):
194
        work_tree = self.make_branch_and_tree('wt')
195
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
196
        a_id = tree.path2id('a')
197
        tree.lock_read()
198
        self.addCleanup(tree.unlock)
199
        with tree.get_file('a') as f:
6973.6.1 by Jelmer Vernooij
More bees.
200
            self.assertEqual(b'foobar\n', f.read())
6977.2.1 by Jelmer Vernooij
Require that get_file implementations are contect managers, simplify file handling in transform.
201
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
202
    def test_get_file_text(self):
203
        work_tree = self.make_branch_and_tree('wt')
204
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
205
        a_id = tree.path2id('a')
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
206
        tree.lock_read()
207
        self.addCleanup(tree.unlock)
208
        # test read by path
6973.7.3 by Jelmer Vernooij
Fix some more tests.
209
        self.assertEqual(b'foobar\n', tree.get_file_text('a'))
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
210
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
211
    def test_get_file_lines(self):
212
        work_tree = self.make_branch_and_tree('wt')
213
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
214
        a_id = tree.path2id('a')
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
215
        tree.lock_read()
216
        self.addCleanup(tree.unlock)
217
        # test read by path
6973.7.3 by Jelmer Vernooij
Fix some more tests.
218
        self.assertEqual([b'foobar\n'], tree.get_file_lines('a'))
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
219
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
220
    def test_get_file_lines_multi_line_breaks(self):
221
        work_tree = self.make_branch_and_tree('wt')
6855.3.1 by Jelmer Vernooij
Several more fixes.
222
        self.build_tree_contents([('wt/foobar', b'a\rb\nc\r\nd')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
223
        work_tree.add('foobar')
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
224
        tree = self._convert_tree(work_tree)
225
        tree.lock_read()
226
        self.addCleanup(tree.unlock)
6973.6.1 by Jelmer Vernooij
More bees.
227
        self.assertEqual([b'a\rb\n', b'c\r\n', b'd'],
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
228
                         tree.get_file_lines('foobar'))
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
229
230
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
231
class TestExtractFilesBytes(TestCaseWithTree):
232
2708.1.7 by Aaron Bentley
Rename extract_files_bytes to iter_files_bytes
233
    def test_iter_files_bytes(self):
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
234
        work_tree = self.make_branch_and_tree('wt')
6855.3.1 by Jelmer Vernooij
Several more fixes.
235
        self.build_tree_contents([('wt/foo', b'foo'),
236
                                  ('wt/bar', b'bar'),
237
                                  ('wt/baz', b'baz')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
238
        work_tree.add(['foo', 'bar', 'baz'])
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
239
        tree = self._convert_tree(work_tree)
240
        tree.lock_read()
241
        self.addCleanup(tree.unlock)
6973.6.1 by Jelmer Vernooij
More bees.
242
        extracted = dict((i, b''.join(b)) for i, b in
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
243
                         tree.iter_files_bytes([('foo', 'id1'),
244
                                                ('bar', 'id2'),
245
                                                ('baz', 'id3')]))
6973.6.1 by Jelmer Vernooij
More bees.
246
        self.assertEqual(b'foo', extracted['id1'])
247
        self.assertEqual(b'bar', extracted['id2'])
248
        self.assertEqual(b'baz', extracted['id3'])
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
249
        self.assertRaises(errors.NoSuchFile, lambda: list(
2708.1.11 by Aaron Bentley
Test and tweak error handling
250
                          tree.iter_files_bytes(
7143.15.2 by Jelmer Vernooij
Run autopep8.
251
                              [('qux', 'file1-notpresent')])))
2748.2.2 by Lukáš Lalinsky
Add TestConflicts to tests.tree_implementations.test_tree. Update NEWS.
252
253
254
class TestConflicts(TestCaseWithTree):
255
256
    def test_conflicts(self):
257
        """Tree.conflicts() should return a ConflictList instance."""
258
        work_tree = self.make_branch_and_tree('wt')
259
        tree = self._convert_tree(work_tree)
2761.1.3 by Aaron Bentley
Update test to use assertIsInstance
260
        self.assertIsInstance(tree.conflicts(), conflicts.ConflictList)
3363.5.4 by Aaron Bentley
Fix iteration order of iter_entries_by_dir
261
262
263
class TestIterEntriesByDir(TestCaseWithTree):
264
265
    def test_iteration_order(self):
266
        work_tree = self.make_branch_and_tree('.')
267
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
268
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
269
        tree = self._convert_tree(work_tree)
270
        output_order = [p for p, e in tree.iter_entries_by_dir()]
271
        self.assertEqual(['', 'a', 'f', 'a/b', 'a/d', 'a/b/c', 'a/d/e', 'f/g'],
272
                         output_order)
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
273
274
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
275
class TestIterChildEntries(TestCaseWithTree):
276
277
    def test_iteration_order(self):
278
        work_tree = self.make_branch_and_tree('.')
279
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
280
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
281
        tree = self._convert_tree(work_tree)
7141.7.1 by Jelmer Vernooij
Get rid of file_ids in most of Tree.
282
        output = [e.name for e in tree.iter_child_entries('')]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
283
        self.assertEqual({'a', 'f'}, set(output))
7141.7.1 by Jelmer Vernooij
Get rid of file_ids in most of Tree.
284
        output = [e.name for e in tree.iter_child_entries('a')]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
285
        self.assertEqual({'b', 'd'}, set(output))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
286
287
    def test_does_not_exist(self):
288
        work_tree = self.make_branch_and_tree('.')
289
        self.build_tree(['a/'])
290
        work_tree.add(['a'])
291
        tree = self._convert_tree(work_tree)
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
292
        self.assertRaises(errors.NoSuchFile, lambda:
7143.15.2 by Jelmer Vernooij
Run autopep8.
293
                          list(tree.iter_child_entries('unknown')))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
294
295
3363.12.7 by Aaron Bentley
Add HasId test
296
class TestHasId(TestCaseWithTree):
297
298
    def test_has_id(self):
299
        work_tree = self.make_branch_and_tree('tree')
300
        self.build_tree(['tree/file'])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
301
        work_tree.add('file')
302
        file_id = work_tree.path2id('file')
3363.12.7 by Aaron Bentley
Add HasId test
303
        tree = self._convert_tree(work_tree)
304
        tree.lock_read()
305
        self.addCleanup(tree.unlock)
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
306
        self.assertTrue(tree.has_id(file_id))
6973.7.5 by Jelmer Vernooij
s/file/open.
307
        self.assertFalse(tree.has_id(b'dir-id'))
3363.13.5 by Aaron Bentley
Merge with paths2ids
308
309
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
310
class TestExtras(TestCaseWithTree):
311
312
    def test_extras(self):
313
        work_tree = self.make_branch_and_tree('tree')
3363.13.4 by Aaron Bentley
Ensure versioned files are not listed by extras
314
        self.build_tree(['tree/file', 'tree/versioned-file'])
315
        work_tree.add(['file', 'versioned-file'])
316
        work_tree.commit('add files')
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
317
        work_tree.remove('file')
318
        tree = self._convert_tree(work_tree)
319
        if isinstance(tree,
320
                      (revisiontree.RevisionTree,
321
                       workingtree_4.DirStateRevisionTree)):
322
            expected = []
323
        else:
324
            expected = ['file']
325
        tree.lock_read()
326
        self.addCleanup(tree.unlock)
327
        self.assertEqual(expected, list(tree.extras()))
3363.15.1 by Aaron Bentley
Add test for has_id
328
3363.17.3 by Aaron Bentley
Merge with has_id
329
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
330
class TestGetFileSha1(TestCaseWithTree):
331
332
    def test_get_file_sha1(self):
333
        work_tree = self.make_branch_and_tree('tree')
6855.3.1 by Jelmer Vernooij
Several more fixes.
334
        self.build_tree_contents([('tree/file', b'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
335
        work_tree.add('file')
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
336
        tree = self._convert_tree(work_tree)
337
        tree.lock_read()
338
        self.addCleanup(tree.unlock)
7045.4.1 by Jelmer Vernooij
Some brz-git fixes.
339
        expected = osutils.sha_string(b'file content')
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
340
        self.assertEqual(expected, tree.get_file_sha1('file'))
5906.1.8 by Jelmer Vernooij
Tests.
341
342
343
class TestGetFileVerifier(TestCaseWithTree):
344
345
    def test_get_file_verifier(self):
346
        work_tree = self.make_branch_and_tree('tree')
347
        self.build_tree_contents([
6855.3.1 by Jelmer Vernooij
Several more fixes.
348
            ('tree/file1', b'file content'),
349
            ('tree/file2', b'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
350
        work_tree.add(['file1', 'file2'])
5906.1.8 by Jelmer Vernooij
Tests.
351
        tree = self._convert_tree(work_tree)
352
        tree.lock_read()
353
        self.addCleanup(tree.unlock)
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
354
        (kind, data) = tree.get_file_verifier('file1')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
355
        self.assertEqual(
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
356
            tree.get_file_verifier('file1'),
357
            tree.get_file_verifier('file2'))
5906.1.10 by Jelmer Vernooij
sha1 -> SHA1
358
        if kind == "SHA1":
7045.4.34 by Jelmer Vernooij
Fix some more tests.
359
            expected = osutils.sha_string(b'file content')
5906.1.8 by Jelmer Vernooij
Tests.
360
            self.assertEqual(expected, data)
6110.6.1 by Jelmer Vernooij
Add Tree.has_versioned_directories.
361
362
363
class TestHasVersionedDirectories(TestCaseWithTree):
364
365
    def test_has_versioned_directories(self):
366
        work_tree = self.make_branch_and_tree('tree')
367
        tree = self._convert_tree(work_tree)
6883.5.22 by Jelmer Vernooij
Review comments.
368
        self.assertIn(tree.has_versioned_directories(), (True, False))
6883.5.17 by Jelmer Vernooij
Add Tree.supports_rename_tracking().
369
370
371
class TestSupportsRenameTracking(TestCaseWithTree):
372
373
    def test_supports_rename_tracking(self):
374
        work_tree = self.make_branch_and_tree('tree')
375
        tree = self._convert_tree(work_tree)
376
        self.assertSubset([tree.supports_rename_tracking()], (True, False))
6929.3.3 by Jelmer Vernooij
Add Tree.versionable_kind.
377
378
379
class TestSupportsVersionableKind(TestCaseWithTree):
380
381
    def test_file(self):
382
        work_tree = self.make_branch_and_tree('tree')
383
        tree = self._convert_tree(work_tree)
384
        self.assertTrue(tree.versionable_kind('file'))
385
386
    def test_unknown(self):
387
        work_tree = self.make_branch_and_tree('tree')
388
        tree = self._convert_tree(work_tree)
389
        self.assertFalse(tree.versionable_kind('unknown'))