85
85
def compare(self, want_unchanged=False, specific_files=None,
86
extra_trees=None, require_versioned=False, include_root=False,
87
want_unversioned=False):
86
extra_trees=None, require_versioned=False, include_root=False,
87
want_unversioned=False):
89
89
('compare', self.source, self.target, want_unchanged,
90
90
specific_files, extra_trees, require_versioned,
116
116
# pass in all optional arguments by keyword
117
117
tree.changes_from(tree2,
118
specific_files='specific',
119
want_unchanged='unchanged',
121
require_versioned='require',
123
want_unversioned=True,
118
specific_files='specific',
119
want_unchanged='unchanged',
121
require_versioned='require',
123
want_unversioned=True,
126
126
InterTree._optimisers = old_optimisers
127
127
self.assertEqual(
129
('compare', tree2, tree, False, None, None, False, False, False),
130
('compare', tree2, tree, 'unchanged', 'specific', 'extra',
131
'require', True, False),
132
('compare', tree2, tree, 'unchanged', 'specific', 'extra',
133
'require', True, True),
129
('compare', tree2, tree, False, None, None, False, False,
131
('compare', tree2, tree, 'unchanged', 'specific', 'extra',
132
'require', True, False),
133
('compare', tree2, tree, 'unchanged', 'specific', 'extra',
134
'require', True, True),
134
135
], RecordingOptimiser.calls)
136
137
def test_changes_from_with_root(self):
148
149
self.build_tree(['known_file', 'unknown_file'])
149
150
wt.add('known_file')
151
self.assertRaises(errors.PathsNotVersionedError,
152
wt.changes_from, wt.basis_tree(), wt, specific_files=['known_file',
153
'unknown_file'], require_versioned=True)
153
errors.PathsNotVersionedError,
154
wt.changes_from, wt.basis_tree(), wt,
155
specific_files=['known_file', 'unknown_file'],
156
require_versioned=True)
155
158
# we need to pass a known file with an unknown file to get this to
156
159
# fail when expected.
157
160
delta = wt.changes_from(wt.basis_tree(),
158
specific_files=['known_file', 'unknown_file'],
159
require_versioned=False)
161
specific_files=['known_file', 'unknown_file'],
162
require_versioned=False)
160
163
self.assertEqual(len(delta.added), 1)
217
220
self.assertIs(None, master_ie, 'master should not have an entry')
218
221
self.assertEqual(len(exp_other_paths), len(other_values),
219
'Wrong number of other entries')
222
'Wrong number of other entries')
221
224
other_file_ids = []
222
225
for path, ie in other_values:
368
371
iterator = walker.iter_all()
369
372
self.assertWalkerNext(u'', root_id, True, [u'', u'', u''], iterator)
370
self.assertWalkerNext(u'a', b'a-id', True, [u'a', u'a', u'a'], iterator)
371
self.assertWalkerNext(u'b', b'b-id', True, [u'b', u'b', u'b'], iterator)
372
self.assertWalkerNext(u'c', b'c-id', False, [u'c', u'c', u'c'], iterator)
373
self.assertWalkerNext(u'd', b'd-id', False, [None, u'd', u'd'], iterator)
374
self.assertWalkerNext(u'e', b'e-id', False, [None, u'e', None], iterator)
373
self.assertWalkerNext(u'a', b'a-id', True,
374
[u'a', u'a', u'a'], iterator)
375
self.assertWalkerNext(u'b', b'b-id', True,
376
[u'b', u'b', u'b'], iterator)
377
self.assertWalkerNext(u'c', b'c-id', False,
378
[u'c', u'c', u'c'], iterator)
379
self.assertWalkerNext(u'd', b'd-id', False,
380
[None, u'd', u'd'], iterator)
381
self.assertWalkerNext(u'e', b'e-id', False,
382
[None, u'e', None], iterator)
375
383
self.assertRaises(StopIteration, next, iterator)
377
385
def test_different_file_id_in_others(self):
403
411
self.assertRaises(StopIteration, next, iterator)
405
413
def assertLtByDirblock(self, lt_val, path1, path2):
406
self.assertEqual(lt_val,
407
_mod_tree.MultiWalker._lt_path_by_dirblock(path1, path2))
415
lt_val, _mod_tree.MultiWalker._lt_path_by_dirblock(path1, path2))
409
417
def test__lt_path_by_dirblock(self):
410
418
# We only support Unicode strings at this point
411
self.assertRaises(TypeError,
412
_mod_tree.MultiWalker._lt_path_by_dirblock, b'', b'b')
420
TypeError, _mod_tree.MultiWalker._lt_path_by_dirblock, b'', b'b')
413
421
self.assertLtByDirblock(False, u'', u'')
414
422
self.assertLtByDirblock(False, u'a', u'a')
415
423
self.assertLtByDirblock(False, u'a/b', u'a/b')
472
480
self.build_tree(['tree/b'])
474
482
self.assertEqual(
476
get_canonical_path(tree, 'b', lambda x: x.lower()))
484
get_canonical_path(tree, 'b', lambda x: x.lower()))
477
485
self.assertEqual(
479
get_canonical_path(tree, 'B', lambda x: x.lower()))
487
get_canonical_path(tree, 'B', lambda x: x.lower()))
481
489
def test_nonexistant_preserves_case(self):
482
490
tree = self.make_branch_and_tree('tree')
483
491
self.assertEqual(
485
get_canonical_path(tree, 'b', lambda x: x.lower()))
493
get_canonical_path(tree, 'b', lambda x: x.lower()))
486
494
self.assertEqual(
488
get_canonical_path(tree, 'B', lambda x: x.lower()))
496
get_canonical_path(tree, 'B', lambda x: x.lower()))
490
498
def test_in_directory_with_case(self):
491
499
tree = self.make_branch_and_tree('tree')
492
500
self.build_tree(['tree/a/', 'tree/a/b'])
493
501
tree.add(['a', 'a/b'])
494
502
self.assertEqual(
496
get_canonical_path(tree, 'a/b', lambda x: x.lower()))
499
get_canonical_path(tree, 'A/B', lambda x: x.lower()))
502
get_canonical_path(tree, 'A/b', lambda x: x.lower()))
505
get_canonical_path(tree, 'A/C', lambda x: x.lower()))
504
get_canonical_path(tree, 'a/b', lambda x: x.lower()))
507
get_canonical_path(tree, 'A/B', lambda x: x.lower()))
510
get_canonical_path(tree, 'A/b', lambda x: x.lower()))
513
get_canonical_path(tree, 'A/C', lambda x: x.lower()))