37
38
TestCaseWithTransport,
41
43
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
42
44
from bzrlib.revisiontree import RevisionTree
43
from bzrlib.workingtree import (WorkingTreeFormat,
44
WorkingTreeTestProviderAdapter,
45
from bzrlib.workingtree import (
48
WorkingTreeTestProviderAdapter,
51
from bzrlib.workingtree_4 import (
49
57
def return_parameter(something):
54
62
def revision_tree_from_workingtree(tree):
55
63
"""Create a revision tree from a working tree."""
64
revid = tree.commit('save tree', allow_pointless=True, recursive=None)
65
return tree.branch.repository.revision_tree(revid)
68
def _dirstate_tree_from_workingtree(tree):
56
69
revid = tree.commit('save tree', allow_pointless=True)
57
return tree.branch.repository.revision_tree(revid)
70
return tree.basis_tree()
60
73
class TestTreeImplementationSupport(TestCaseWithTransport):
93
106
def _make_abc_tree(self, tree):
94
107
"""setup an abc content tree."""
95
108
files = ['a', 'b/', 'b/c']
96
self.build_tree(files, line_endings='binary',
109
self.build_tree(files, line_endings='binary',
97
110
transport=tree.bzrdir.root_transport)
98
111
tree.set_root_id('root-id')
99
112
tree.add(files, ['a-id', 'b-id', 'c-id'])
166
179
return self._convert_tree(tree, converter)
181
def get_tree_with_subdirs_and_all_content_types(self):
182
"""Return a test tree with subdirs and all content types.
184
The returned tree has the following inventory:
185
[('', inventory.ROOT_ID),
187
('1top-dir', '1top-dir'),
188
(u'2utf\u1234file', u'0utf\u1234file'),
189
('symlink', 'symlink'),
190
('1top-dir/0file-in-1topdir', '1file-in-1topdir'),
191
('1top-dir/1dir-in-1topdir', '0dir-in-1topdir')]
192
where each component has the type of its name - i.e. '1file..' is afile.
194
note that the order of the paths and fileids is deliberately
195
mismatched to ensure that the result order is path based.
197
tree = self.make_branch_and_tree('.')
201
'1top-dir/0file-in-1topdir',
202
'1top-dir/1dir-in-1topdir/'
207
u'0utf\u1234file'.encode('utf8'),
212
self.build_tree(paths)
215
'This platform does not support unicode file paths.')
217
tt = transform.TreeTransform(tree)
218
root_transaction_id = tt.trans_id_tree_path('')
219
tt.new_symlink('symlink',
220
root_transaction_id, 'link-target', 'symlink')
222
return self.workingtree_to_test_tree(tree)
168
224
def get_tree_with_utf8(self, tree):
169
225
"""Generate a tree with a utf8 revision and unicode paths."""
170
226
self._create_tree_with_utf8(tree)
180
236
# bzr itself does not create unicode file ids, but we want them for
182
file_ids = [u'TREE_ROOT',
238
file_ids = ['TREE_ROOT',
188
244
self.build_tree(paths[1:])
189
245
except UnicodeError:
190
246
raise tests.TestSkipped('filesystem does not support unicode.')
191
tree.add(paths, file_ids)
247
if tree.path2id('') is None:
248
# Some trees do not have a root yet.
249
tree.add(paths, file_ids)
251
# Some trees will already have a root
252
tree.set_root_id(file_ids[0])
253
tree.add(paths[1:], file_ids[1:])
193
255
tree.commit(u'in\xedtial', rev_id=u'r\xe9v-1'.encode('utf8'))
194
256
except errors.NonAsciiRevisionId:
199
261
self._create_tree_with_utf8(tree)
200
262
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
201
263
self.build_tree([u'tree2/b\xe5r/z\xf7z'])
202
tree2.add([u'b\xe5r/z\xf7z'], [u'z\xf7z-id'])
264
self.callDeprecated([osutils._file_id_warning],
265
tree2.add, [u'b\xe5r/z\xf7z'], [u'z\xf7z-id'])
203
266
tree2.commit(u'to m\xe9rge', rev_id=u'r\xe9v-2'.encode('utf8'))
205
268
tree.merge_from_branch(tree2.branch)
219
282
for adapted_test in result:
220
283
# for working tree adapted tests, preserve the tree
221
284
adapted_test.workingtree_to_test_tree = return_parameter
222
default_format = WorkingTreeFormat.get_default_format()
285
# this is the default in that it's used to test the generic InterTree
287
default_format = WorkingTreeFormat3()
223
288
revision_tree_test = self._clone_test(
225
290
default_format._matchingbzrdir,
227
292
RevisionTree.__name__)
228
293
revision_tree_test.workingtree_to_test_tree = revision_tree_from_workingtree
229
294
result.addTest(revision_tree_test)
295
# also explicity test WorkingTree4 against everything
296
dirstate_format = WorkingTreeFormat4()
297
dirstate_revision_tree_test = self._clone_test(
299
dirstate_format._matchingbzrdir,
301
DirStateRevisionTree.__name__)
302
dirstate_revision_tree_test.workingtree_to_test_tree = _dirstate_tree_from_workingtree
303
result.addTest(dirstate_revision_tree_test)
233
307
def test_suite():
234
308
result = TestSuite()
235
309
test_tree_implementations = [
310
'bzrlib.tests.tree_implementations.test_get_file_mtime',
311
'bzrlib.tests.tree_implementations.test_get_symlink_target',
312
'bzrlib.tests.tree_implementations.test_list_files',
313
'bzrlib.tests.tree_implementations.test_revision_tree',
236
314
'bzrlib.tests.tree_implementations.test_test_trees',
237
315
'bzrlib.tests.tree_implementations.test_tree',
316
'bzrlib.tests.tree_implementations.test_walkdirs',
239
318
adapter = TreeTestProviderAdapter(
240
319
default_transport,