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.
598
564
'This might be a signature')
600
566
# XXX: this helper duplicated from tests.test_repository
601
def make_remote_repository(self, path, shared=False):
567
def make_remote_repository(self, path, shared=None):
602
568
"""Make a RemoteRepository object backed by a real repository that will
603
569
be created at the given path."""
604
570
repo = self.make_repository(path, shared=shared)
605
571
smart_server = test_server.SmartTCPServer_for_testing()
606
572
self.start_server(smart_server, self.get_server())
607
remote_transport = transport.get_transport(
573
remote_transport = transport.get_transport_from_url(
608
574
smart_server.get_url()).clone(path)
609
remote_bzrdir = bzrdir.BzrDir.open_from_transport(remote_transport)
575
if not repo.bzrdir._format.supports_transport(remote_transport):
576
raise tests.TestNotApplicable(
577
"format does not support transport")
578
remote_bzrdir = controldir.ControlDir.open_from_transport(
610
580
remote_repo = remote_bzrdir.open_repository()
611
581
return remote_repo
747
719
repo = self.make_repository('repo')
748
720
repo._make_parents_provider().get_parent_map
750
def make_repository_and_foo_bar(self, shared):
722
def make_repository_and_foo_bar(self, shared=None):
751
723
made_control = self.make_bzrdir('repository')
752
724
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'),
725
if not repo._format.supports_nesting_repositories:
726
raise tests.TestNotApplicable("repository does not support "
727
"nesting repositories")
728
controldir.ControlDir.create_branch_convenience(
729
self.get_url('repository/foo'), force_new_repo=False)
730
controldir.ControlDir.create_branch_convenience(
731
self.get_url('repository/bar'), force_new_repo=True)
757
732
baz = self.make_bzrdir('repository/baz')
758
733
qux = self.make_branch('repository/baz/qux')
759
734
quxx = self.make_branch('repository/baz/qux/quxx')
762
737
def test_find_branches(self):
763
repo = self.make_repository_and_foo_bar(shared=False)
738
repo = self.make_repository_and_foo_bar()
764
739
branches = repo.find_branches()
765
740
self.assertContainsRe(branches[-1].base, 'repository/foo/$')
766
741
self.assertContainsRe(branches[-3].base, 'repository/baz/qux/$')
947
928
repo = self.make_repository('repo')
948
929
self.assertIsInstance(repo.user_url, str)
949
930
self.assertEqual(repo.user_url, repo.user_transport.base)
950
# for all current bzrdir implementations the user dir must be
931
# for all current bzrdir implementations the user dir must be
951
932
# above the control dir but we might need to relax that?
952
933
self.assertEqual(repo.control_url.find(repo.user_url), 0)
953
934
self.assertEqual(repo.control_url, repo.control_transport.base)
937
class TestDeltaRevisionFiltered(per_repository.TestCaseWithRepository):
940
super(TestDeltaRevisionFiltered, self).setUp()
941
tree_a = self.make_branch_and_tree('a')
942
self.build_tree(['a/foo', 'a/bar/', 'a/bar/b1', 'a/bar/b2', 'a/baz'])
943
tree_a.add(['foo', 'bar', 'bar/b1', 'bar/b2', 'baz'],
944
['foo-id', 'bar-id', 'b1-id', 'b2-id', 'baz-id'])
945
tree_a.commit('rev1', rev_id='rev1')
946
self.build_tree(['a/bar/b3'])
947
tree_a.add('bar/b3', 'b3-id')
948
tree_a.commit('rev2', rev_id='rev2')
949
self.repository = tree_a.branch.repository
951
def test_multiple_files(self):
952
# Test multiple files
953
delta = self.repository.get_revision_delta('rev1',
954
specific_fileids=['foo-id', 'baz-id'])
955
self.assertIsInstance(delta, _mod_delta.TreeDelta)
957
('baz', 'baz-id', 'file'),
958
('foo', 'foo-id', 'file'),
961
def test_directory(self):
963
delta = self.repository.get_revision_delta('rev1',
964
specific_fileids=['bar-id'])
965
self.assertIsInstance(delta, _mod_delta.TreeDelta)
967
('bar', 'bar-id', 'directory'),
968
('bar/b1', 'b1-id', 'file'),
969
('bar/b2', 'b2-id', 'file'),
972
def test_unrelated(self):
973
# Try another revision
974
delta = self.repository.get_revision_delta('rev2',
975
specific_fileids=['foo-id'])
976
self.assertIsInstance(delta, _mod_delta.TreeDelta)
977
self.assertEqual([], delta.added)
979
def test_file_in_directory(self):
980
# Test a file in a directory, both of which were added
981
delta = self.repository.get_revision_delta('rev1',
982
specific_fileids=['b2-id'])
983
self.assertIsInstance(delta, _mod_delta.TreeDelta)
985
('bar', 'bar-id', 'directory'),
986
('bar/b2', 'b2-id', 'file'),
989
def test_file_in_unchanged_directory(self):
990
delta = self.repository.get_revision_delta('rev2',
991
specific_fileids=['b3-id'])
992
self.assertIsInstance(delta, _mod_delta.TreeDelta)
994
('bar', 'bar-id', 'directory'),
995
('bar/b3', 'b3-id', 'file')]:
996
self.knownFailure("bzr incorrectly reports 'bar' as added - "
999
('bar/b3', 'b3-id', 'file'),