282
287
self.assertIsInstance(delta, _mod_delta.TreeDelta)
283
288
self.assertEqual([('vla', 'file2', 'file')], delta.added)
285
def test_get_revision_delta_filtered(self):
286
tree_a = self.make_branch_and_tree('a')
287
self.build_tree(['a/foo', 'a/bar/', 'a/bar/b1', 'a/bar/b2', 'a/baz'])
288
tree_a.add(['foo', 'bar', 'bar/b1', 'bar/b2', 'baz'],
289
['foo-id', 'bar-id', 'b1-id', 'b2-id', 'baz-id'])
290
tree_a.commit('rev1', rev_id='rev1')
291
self.build_tree(['a/bar/b3'])
292
tree_a.add('bar/b3', 'b3-id')
293
tree_a.commit('rev2', rev_id='rev2')
295
# Test multiple files
296
delta = tree_a.branch.repository.get_revision_delta('rev1',
297
specific_fileids=['foo-id', 'baz-id'])
298
self.assertIsInstance(delta, _mod_delta.TreeDelta)
300
('baz', 'baz-id', 'file'),
301
('foo', 'foo-id', 'file'),
304
delta = tree_a.branch.repository.get_revision_delta('rev1',
305
specific_fileids=['bar-id'])
306
self.assertIsInstance(delta, _mod_delta.TreeDelta)
308
('bar', 'bar-id', 'directory'),
309
('bar/b1', 'b1-id', 'file'),
310
('bar/b2', 'b2-id', 'file'),
312
# Test a file in a directory
313
delta = tree_a.branch.repository.get_revision_delta('rev1',
314
specific_fileids=['b2-id'])
315
self.assertIsInstance(delta, _mod_delta.TreeDelta)
317
('bar', 'bar-id', 'directory'),
318
('bar/b2', 'b2-id', 'file'),
320
# Try another revision
321
delta = tree_a.branch.repository.get_revision_delta('rev2',
322
specific_fileids=['b3-id'])
323
self.assertIsInstance(delta, _mod_delta.TreeDelta)
325
('bar', 'bar-id', 'directory'),
326
('bar/b3', 'b3-id', 'file'),
328
delta = tree_a.branch.repository.get_revision_delta('rev2',
329
specific_fileids=['foo-id'])
330
self.assertIsInstance(delta, _mod_delta.TreeDelta)
331
self.assertEqual([], delta.added)
333
290
def test_clone_bzrdir_repository_revision(self):
334
291
# make a repository with some revisions,
335
292
# and clone it, this should not have unreferenced revisions.
591
552
b = builder.get_branch()
593
554
self.addCleanup(b.unlock)
594
b.repository.start_write_group()
595
self.addCleanup(b.repository.abort_write_group)
596
555
if b.repository._format.supports_revision_signatures:
556
b.repository.start_write_group()
597
557
b.repository.add_signature_text('A', 'This might be a signature')
558
b.repository.commit_write_group()
598
559
self.assertEqual('This might be a signature',
599
560
b.repository.get_signature_text('A'))
562
b.repository.start_write_group()
563
self.addCleanup(b.repository.abort_write_group)
601
564
self.assertRaises(errors.UnsupportedOperation,
602
565
b.repository.add_signature_text, 'A',
603
566
'This might be a signature')
605
568
# XXX: this helper duplicated from tests.test_repository
606
def make_remote_repository(self, path, shared=False):
569
def make_remote_repository(self, path, shared=None):
607
570
"""Make a RemoteRepository object backed by a real repository that will
608
571
be created at the given path."""
609
572
repo = self.make_repository(path, shared=shared)
655
624
"Format can not be used over HPSS")
656
625
# Make a shared repo
657
626
remote_repo = self.make_remote_repository('remote', shared=True)
658
remote_backing_repo = bzrdir.BzrDir.open(
627
remote_backing_repo = controldir.ControlDir.open(
659
628
self.get_vfs_only_url('remote')).open_repository()
660
629
# Make a branch in that repo in an old format that isn't the default
661
630
# branch format for the repo.
662
from bzrlib.branch import BzrBranchFormat5
631
from bzrlib.branchfmt.fullhistory import BzrBranchFormat5
663
632
format = remote_backing_repo.bzrdir.cloning_metadir()
664
633
format._branch_format = BzrBranchFormat5()
665
634
remote_transport = remote_repo.bzrdir.root_transport.clone('branch')
666
remote_backing_repo.bzrdir.create_branch_convenience(
635
controldir.ControlDir.create_branch_convenience(
667
636
remote_transport.base, force_new_repo=False, format=format)
668
remote_branch = bzrdir.BzrDir.open_from_transport(
637
remote_branch = controldir.ControlDir.open_from_transport(
669
638
remote_transport).open_branch()
671
640
local_bzrdir = remote_branch.bzrdir.sprout('local')
758
727
if not repo._format.supports_nesting_repositories:
759
728
raise tests.TestNotApplicable("repository does not support "
760
729
"nesting repositories")
761
bzrdir.BzrDir.create_branch_convenience(self.get_url('repository/foo'),
762
force_new_repo=False)
763
bzrdir.BzrDir.create_branch_convenience(self.get_url('repository/bar'),
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)
765
734
baz = self.make_bzrdir('repository/baz')
766
735
qux = self.make_branch('repository/baz/qux')
767
736
quxx = self.make_branch('repository/baz/qux/quxx')
957
930
repo = self.make_repository('repo')
958
931
self.assertIsInstance(repo.user_url, str)
959
932
self.assertEqual(repo.user_url, repo.user_transport.base)
960
# for all current bzrdir implementations the user dir must be
933
# for all current bzrdir implementations the user dir must be
961
934
# above the control dir but we might need to relax that?
962
935
self.assertEqual(repo.control_url.find(repo.user_url), 0)
963
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'),