68
68
"""Test the format.fast_deltas attribute."""
69
69
self.assertFormatAttribute('fast_deltas', (True, False))
71
def test_attribute_supports_nesting_repositories(self):
72
"""Test the format.supports_nesting_repositories."""
73
self.assertFormatAttribute('supports_nesting_repositories',
76
def test_attribute_supports_unreferenced_revisions(self):
77
"""Test the format.supports_unreferenced_revisions."""
78
self.assertFormatAttribute('supports_unreferenced_revisions',
71
81
def test_attribute__fetch_reconcile(self):
72
82
"""Test the _fetch_reconcile attribute."""
73
83
self.assertFormatAttribute('_fetch_reconcile', (True, False))
277
287
self.assertIsInstance(delta, _mod_delta.TreeDelta)
278
288
self.assertEqual([('vla', 'file2', 'file')], delta.added)
280
def test_get_revision_delta_filtered(self):
281
tree_a = self.make_branch_and_tree('a')
282
self.build_tree(['a/foo', 'a/bar/', 'a/bar/b1', 'a/bar/b2', 'a/baz'])
283
tree_a.add(['foo', 'bar', 'bar/b1', 'bar/b2', 'baz'],
284
['foo-id', 'bar-id', 'b1-id', 'b2-id', 'baz-id'])
285
tree_a.commit('rev1', rev_id='rev1')
286
self.build_tree(['a/bar/b3'])
287
tree_a.add('bar/b3', 'b3-id')
288
tree_a.commit('rev2', rev_id='rev2')
290
# Test multiple files
291
delta = tree_a.branch.repository.get_revision_delta('rev1',
292
specific_fileids=['foo-id', 'baz-id'])
293
self.assertIsInstance(delta, _mod_delta.TreeDelta)
295
('baz', 'baz-id', 'file'),
296
('foo', 'foo-id', 'file'),
299
delta = tree_a.branch.repository.get_revision_delta('rev1',
300
specific_fileids=['bar-id'])
301
self.assertIsInstance(delta, _mod_delta.TreeDelta)
303
('bar', 'bar-id', 'directory'),
304
('bar/b1', 'b1-id', 'file'),
305
('bar/b2', 'b2-id', 'file'),
307
# Test a file in a directory
308
delta = tree_a.branch.repository.get_revision_delta('rev1',
309
specific_fileids=['b2-id'])
310
self.assertIsInstance(delta, _mod_delta.TreeDelta)
312
('bar', 'bar-id', 'directory'),
313
('bar/b2', 'b2-id', 'file'),
315
# Try another revision
316
delta = tree_a.branch.repository.get_revision_delta('rev2',
317
specific_fileids=['b3-id'])
318
self.assertIsInstance(delta, _mod_delta.TreeDelta)
320
('bar', 'bar-id', 'directory'),
321
('bar/b3', 'b3-id', 'file'),
323
delta = tree_a.branch.repository.get_revision_delta('rev2',
324
specific_fileids=['foo-id'])
325
self.assertIsInstance(delta, _mod_delta.TreeDelta)
326
self.assertEqual([], delta.added)
328
290
def test_clone_bzrdir_repository_revision(self):
329
291
# make a repository with some revisions,
330
292
# and clone it, this should not have unreferenced revisions.
369
334
repo.sign_revision('A', gpg.LoopbackGPGStrategy(None))
370
335
except errors.UnsupportedOperation:
371
336
self.assertFalse(repo._format.supports_revision_signatures)
372
raise TestNotApplicable("signatures not supported by repository format")
337
raise tests.TestNotApplicable("signatures not supported by repository format")
373
338
repo.commit_write_group()
375
340
old_signature = repo.get_signature_text('A')
377
old_format = bzrdir.BzrDirFormat.get_default_format()
342
old_format = controldir.ControlDirFormat.get_default_format()
378
343
# This gives metadir branches something they can convert to.
379
344
# it would be nice to have a 'latest' vs 'default' concept.
380
format = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
345
format = controldir.format_registry.make_bzrdir(
346
'dirstate-with-subtree')
381
347
upgrade.upgrade(repo.bzrdir.root_transport.base, format=format)
382
348
except errors.UpToDateFormat:
383
349
# this is in the most current format already.
586
552
b = builder.get_branch()
588
554
self.addCleanup(b.unlock)
589
b.repository.start_write_group()
590
self.addCleanup(b.repository.abort_write_group)
591
555
if b.repository._format.supports_revision_signatures:
556
b.repository.start_write_group()
592
557
b.repository.add_signature_text('A', 'This might be a signature')
558
b.repository.commit_write_group()
593
559
self.assertEqual('This might be a signature',
594
560
b.repository.get_signature_text('A'))
562
b.repository.start_write_group()
563
self.addCleanup(b.repository.abort_write_group)
596
564
self.assertRaises(errors.UnsupportedOperation,
597
565
b.repository.add_signature_text, 'A',
598
566
'This might be a signature')
600
568
# XXX: this helper duplicated from tests.test_repository
601
def make_remote_repository(self, path, shared=False):
569
def make_remote_repository(self, path, shared=None):
602
570
"""Make a RemoteRepository object backed by a real repository that will
603
571
be created at the given path."""
604
572
repo = self.make_repository(path, shared=shared)
747
721
repo = self.make_repository('repo')
748
722
repo._make_parents_provider().get_parent_map
750
def make_repository_and_foo_bar(self, shared):
724
def make_repository_and_foo_bar(self, shared=None):
751
725
made_control = self.make_bzrdir('repository')
752
726
repo = made_control.create_repository(shared=shared)
753
bzrdir.BzrDir.create_branch_convenience(self.get_url('repository/foo'),
754
force_new_repo=False)
755
bzrdir.BzrDir.create_branch_convenience(self.get_url('repository/bar'),
727
if not repo._format.supports_nesting_repositories:
728
raise tests.TestNotApplicable("repository does not support "
729
"nesting repositories")
730
controldir.ControlDir.create_branch_convenience(
731
self.get_url('repository/foo'), force_new_repo=False)
732
controldir.ControlDir.create_branch_convenience(
733
self.get_url('repository/bar'), force_new_repo=True)
757
734
baz = self.make_bzrdir('repository/baz')
758
735
qux = self.make_branch('repository/baz/qux')
759
736
quxx = self.make_branch('repository/baz/qux/quxx')
762
739
def test_find_branches(self):
763
repo = self.make_repository_and_foo_bar(shared=False)
740
repo = self.make_repository_and_foo_bar()
764
741
branches = repo.find_branches()
765
742
self.assertContainsRe(branches[-1].base, 'repository/foo/$')
766
743
self.assertContainsRe(branches[-3].base, 'repository/baz/qux/$')
947
930
repo = self.make_repository('repo')
948
931
self.assertIsInstance(repo.user_url, str)
949
932
self.assertEqual(repo.user_url, repo.user_transport.base)
950
# for all current bzrdir implementations the user dir must be
933
# for all current bzrdir implementations the user dir must be
951
934
# above the control dir but we might need to relax that?
952
935
self.assertEqual(repo.control_url.find(repo.user_url), 0)
953
936
self.assertEqual(repo.control_url, repo.control_transport.base)
939
class TestDeltaRevisionFiltered(per_repository.TestCaseWithRepository):
942
super(TestDeltaRevisionFiltered, self).setUp()
943
tree_a = self.make_branch_and_tree('a')
944
self.build_tree(['a/foo', 'a/bar/', 'a/bar/b1', 'a/bar/b2', 'a/baz'])
945
tree_a.add(['foo', 'bar', 'bar/b1', 'bar/b2', 'baz'],
946
['foo-id', 'bar-id', 'b1-id', 'b2-id', 'baz-id'])
947
tree_a.commit('rev1', rev_id='rev1')
948
self.build_tree(['a/bar/b3'])
949
tree_a.add('bar/b3', 'b3-id')
950
tree_a.commit('rev2', rev_id='rev2')
951
self.repository = tree_a.branch.repository
953
def test_multiple_files(self):
954
# Test multiple files
955
delta = self.repository.get_revision_delta('rev1',
956
specific_fileids=['foo-id', 'baz-id'])
957
self.assertIsInstance(delta, _mod_delta.TreeDelta)
959
('baz', 'baz-id', 'file'),
960
('foo', 'foo-id', 'file'),
963
def test_directory(self):
965
delta = self.repository.get_revision_delta('rev1',
966
specific_fileids=['bar-id'])
967
self.assertIsInstance(delta, _mod_delta.TreeDelta)
969
('bar', 'bar-id', 'directory'),
970
('bar/b1', 'b1-id', 'file'),
971
('bar/b2', 'b2-id', 'file'),
974
def test_unrelated(self):
975
# Try another revision
976
delta = self.repository.get_revision_delta('rev2',
977
specific_fileids=['foo-id'])
978
self.assertIsInstance(delta, _mod_delta.TreeDelta)
979
self.assertEqual([], delta.added)
981
def test_file_in_directory(self):
982
# Test a file in a directory, both of which were added
983
delta = self.repository.get_revision_delta('rev1',
984
specific_fileids=['b2-id'])
985
self.assertIsInstance(delta, _mod_delta.TreeDelta)
987
('bar', 'bar-id', 'directory'),
988
('bar/b2', 'b2-id', 'file'),
991
def test_file_in_unchanged_directory(self):
992
delta = self.repository.get_revision_delta('rev2',
993
specific_fileids=['b3-id'])
994
self.assertIsInstance(delta, _mod_delta.TreeDelta)
996
('bar', 'bar-id', 'directory'),
997
('bar/b3', 'b3-id', 'file')]:
998
self.knownFailure("bzr incorrectly reports 'bar' as added - "
1001
('bar/b3', 'b3-id', 'file'),