126
126
for rev_id in left_repo.all_revision_ids():
127
127
self.assertEqual(left_repo.get_revision(rev_id),
128
128
right_repo.get_revision(rev_id))
130
left_inv_weave = left_repo.inventories
131
right_inv_weave = right_repo.inventories
132
self.assertEqual(set(left_inv_weave.keys()),
133
set(right_inv_weave.keys()))
134
# XXX: currently this does not handle indirectly referenced
135
# inventories (e.g. where the inventory is a delta basis for
136
# one that is fully present but that the revid for that
137
# inventory is not yet present.)
138
self.assertEqual(set(left_inv_weave.keys()),
139
set(left_repo.revisions.keys()))
140
left_trees = left_repo.revision_trees(all_revs)
141
right_trees = right_repo.revision_trees(all_revs)
142
for left_tree, right_tree in izip(left_trees, right_trees):
143
self.assertEqual(left_tree.inventory, right_tree.inventory)
129
# Assert the revision trees (and thus the inventories) are equal
130
sort_key = lambda rev_tree: rev_tree.get_revision_id()
131
rev_trees_a = sorted(
132
left_repo.revision_trees(all_revs), key=sort_key)
133
rev_trees_b = sorted(
134
right_repo.revision_trees(all_revs), key=sort_key)
135
for tree_a, tree_b in zip(rev_trees_a, rev_trees_b):
136
self.assertEqual([], list(tree_a.iter_changes(tree_b)))
145
138
text_index = left_repo._generate_text_key_index()
146
139
self.assertEqual(text_index,
178
171
raise TestSkipped("bzrdir on transport %r has no working tree"
179
172
% a_bzrdir.transport)
174
def openWorkingTreeIfLocal(self, a_bzrdir):
175
"""If a_bzrdir is on a local transport, call open_workingtree() on it.
177
if not isinstance(a_bzrdir.root_transport, LocalTransport):
178
# it's not local, but that's ok
180
a_bzrdir.open_workingtree()
181
182
def createWorkingTreeOrSkip(self, a_bzrdir):
182
183
"""Create a working tree on a_bzrdir, or raise TestSkipped.
553
554
# Ensure no format data is cached
554
555
a_dir = bzrlib.branch.Branch.open_from_transport(
555
556
self.get_transport('source')).bzrdir
556
target_transport = a_dir.root_transport.clone('..').clone('target')
557
target_transport = self.get_transport('target')
557
558
target_bzrdir = a_dir.clone_on_transport(target_transport)
558
559
target_repo = target_bzrdir.open_repository()
559
560
source_branch = bzrlib.branch.Branch.open(
656
657
def test_clone_respects_stacked(self):
657
658
branch = self.make_branch('parent')
658
child_transport = branch.bzrdir.root_transport.clone('../child')
659
child_transport = self.get_transport('child')
659
660
child = branch.bzrdir.clone_on_transport(child_transport,
660
661
stacked_on=branch.base)
661
662
self.assertEqual(child.open_branch().get_stacked_on_url(), branch.base)
689
690
def test_sprout_bzrdir_empty(self):
690
691
dir = self.make_bzrdir('source')
691
target = self.sproutOrSkip(dir, self.get_url('target'))
692
target = dir.sprout(self.get_url('target'))
692
693
self.assertNotEqual(dir.transport.base, target.transport.base)
693
694
# creates a new repository branch and tree
694
695
target.open_repository()
695
696
target.open_branch()
696
target.open_workingtree()
697
self.openWorkingTreeIfLocal(target)
698
699
def test_sprout_bzrdir_empty_under_shared_repo(self):
699
700
# sprouting an empty dir into a repo uses the repo
702
703
self.make_repository('target', shared=True)
703
704
except errors.IncompatibleFormat:
705
target = self.sproutOrSkip(dir, self.get_url('target/child'))
706
target = dir.sprout(self.get_url('target/child'))
706
707
self.assertRaises(errors.NoRepositoryPresent, target.open_repository)
707
708
target.open_branch()
720
721
self.make_repository('target', shared=True)
721
722
except errors.IncompatibleFormat:
723
target = self.sproutOrSkip(dir, self.get_url('target/child'),
724
target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
725
725
target.open_repository()
726
726
target.open_branch()
727
target.open_workingtree()
727
self.openWorkingTreeIfLocal(target)
729
729
def test_sprout_bzrdir_repository(self):
730
730
tree = self.make_branch_and_tree('commit_tree')
741
741
dir.open_branch().last_revision())))
742
742
except errors.NotBranchError:
744
target = self.sproutOrSkip(dir, self.get_url('target'))
744
target = dir.sprout(self.get_url('target'))
745
745
self.assertNotEqual(dir.transport.base, target.transport.base)
746
746
# testing inventory isn't reasonable for repositories
747
747
self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
779
779
shared_repo = self.make_repository('target', shared=True)
780
780
except errors.IncompatibleFormat:
782
target = self.sproutOrSkip(dir, self.get_url('target/child'))
782
target = dir.sprout(self.get_url('target/child'))
783
783
self.assertNotEqual(dir.transport.base, target.transport.base)
784
784
self.assertTrue(shared_repo.has_revision('1'))
798
798
tree.branch.repository.copy_content_into(shared_repo)
799
799
dir = self.make_bzrdir('shared/source')
800
800
dir.create_branch()
801
target = self.sproutOrSkip(dir, self.get_url('shared/target'))
801
target = dir.sprout(self.get_url('shared/target'))
802
802
self.assertNotEqual(dir.transport.base, target.transport.base)
803
803
self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
804
804
self.assertTrue(shared_repo.has_revision('1'))
822
822
self.assertTrue(shared_repo.has_revision('1'))
823
823
dir = self.make_bzrdir('shared/source')
824
824
dir.create_branch()
825
target = self.sproutOrSkip(dir, self.get_url('target'))
825
target = dir.sprout(self.get_url('target'))
826
826
self.assertNotEqual(dir.transport.base, target.transport.base)
827
827
self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
828
828
branch = target.open_branch()
846
846
shared_repo = self.make_repository('target', shared=True)
847
847
except errors.IncompatibleFormat:
849
target = self.sproutOrSkip(dir, self.get_url('target/child'),
849
target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
851
850
self.assertNotEqual(dir.transport.base, target.transport.base)
852
851
self.assertFalse(shared_repo.has_revision('1'))
878
877
tree.branch.repository.copy_content_into(source.repository)
879
878
tree.bzrdir.open_branch().copy_content_into(source)
880
879
dir = source.bzrdir
881
target = self.sproutOrSkip(dir, self.get_url('target'))
880
target = dir.sprout(self.get_url('target'))
882
881
self.assertNotEqual(dir.transport.base, target.transport.base)
882
target_repo = target.open_repository()
883
self.assertRepositoryHasSameItems(source.repository, target_repo)
883
884
self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
885
886
'./.bzr/basis-inventory-cache',
910
911
shared_repo = self.make_repository('target', shared=True)
911
912
except errors.IncompatibleFormat:
913
target = self.sproutOrSkip(dir, self.get_url('target/child'))
914
target = dir.sprout(self.get_url('target/child'))
914
915
self.assertTrue(shared_repo.has_revision('1'))
916
917
def test_sprout_bzrdir_branch_and_repo_shared_force_new_repo(self):
928
929
shared_repo = self.make_repository('target', shared=True)
929
930
except errors.IncompatibleFormat:
931
target = self.sproutOrSkip(dir, self.get_url('target/child'),
932
target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
933
933
self.assertNotEqual(dir.transport.base, target.transport.base)
934
934
self.assertFalse(shared_repo.has_revision('1'))
936
936
def test_sprout_bzrdir_branch_reference(self):
937
937
# sprouting should create a repository if needed and a sprouted branch.
938
referenced_branch = self.make_branch('referencced')
938
referenced_branch = self.make_branch('referenced')
939
939
dir = self.make_bzrdir('source')
941
941
reference = bzrlib.branch.BranchReferenceFormat().initialize(dir,
944
944
# this is ok too, not all formats have to support references.
946
946
self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
947
target = self.sproutOrSkip(dir, self.get_url('target'))
947
target = dir.sprout(self.get_url('target'))
948
948
self.assertNotEqual(dir.transport.base, target.transport.base)
949
949
# we want target to have a branch that is in-place.
950
950
self.assertEqual(target, target.open_branch().bzrdir)
968
968
shared_repo = self.make_repository('target', shared=True)
969
969
except errors.IncompatibleFormat:
971
target = self.sproutOrSkip(dir, self.get_url('target/child'))
971
target = dir.sprout(self.get_url('target/child'))
972
972
self.assertNotEqual(dir.transport.base, target.transport.base)
973
973
# we want target to have a branch that is in-place.
974
974
self.assertEqual(target, target.open_branch().bzrdir)
994
994
shared_repo = self.make_repository('target', shared=True)
995
995
except errors.IncompatibleFormat:
997
target = self.sproutOrSkip(dir, self.get_url('target/child'),
997
target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
999
998
self.assertNotEqual(dir.transport.base, target.transport.base)
1000
999
# we want target to have a branch that is in-place.
1001
1000
self.assertEqual(target, target.open_branch().bzrdir)
1018
1017
tree.branch.repository.copy_content_into(source.repository)
1019
1018
tree.bzrdir.open_branch().copy_content_into(source)
1020
1019
dir = source.bzrdir
1021
target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='1')
1020
target = dir.sprout(self.get_url('target'), revision_id='1')
1022
1021
self.assertEqual('1', target.open_branch().last_revision())
1024
1023
def test_sprout_bzrdir_tree_branch_repo(self):
1059
1058
tree = self.createWorkingTreeOrSkip(dir)
1060
1059
self.build_tree(['source/subdir/'])
1061
1060
tree.add('subdir')
1062
target = self.sproutOrSkip(dir, self.get_url('target'))
1061
target = dir.sprout(self.get_url('target'))
1063
1062
self.assertNotEqual(dir.transport.base, target.transport.base)
1064
1063
# we want target to have a branch that is in-place.
1065
1064
self.assertEqual(target, target.open_branch().bzrdir)
1133
1132
tree.commit('revision 2', rev_id='2', allow_pointless=True)
1134
1133
dir = tree.bzrdir
1135
1134
if isinstance(dir, (bzrdir.BzrDirPreSplitOut,)):
1136
self.assertRaises(errors.MustHaveWorkingTree, self.sproutOrSkip,
1137
dir, self.get_url('target'),
1135
self.assertRaises(errors.MustHaveWorkingTree, dir.sprout,
1136
self.get_url('target'),
1138
1137
create_tree_if_local=False)
1140
target = self.sproutOrSkip(dir, self.get_url('target'),
1141
create_tree_if_local=False)
1139
target = dir.sprout(self.get_url('target'), create_tree_if_local=False)
1142
1140
self.failIfExists('target/foo')
1143
1141
self.assertEqual(tree.branch.last_revision(),
1144
1142
target.open_branch().last_revision())
1165
1163
opened_dir._format)
1166
1164
self.failUnless(isinstance(opened_dir, bzrdir.BzrDir))
1166
def test_format_network_name(self):
1167
# All control formats must have a network name.
1168
dir = self.make_bzrdir('.')
1169
format = dir._format
1170
# We want to test that the network_name matches the actual format on
1171
# disk. For local control dirsthat means that using network_name as a
1172
# key in the registry gives back the same format. For remote obects
1173
# we check that the network_name of the RemoteBzrDirFormat we have
1174
# locally matches the actual format present on disk.
1175
if isinstance(format, bzrdir.RemoteBzrDirFormat):
1177
real_dir = dir._real_bzrdir
1178
network_name = format.network_name()
1179
self.assertEqual(real_dir._format.network_name(), network_name)
1181
registry = bzrdir.network_format_registry
1182
network_name = format.network_name()
1183
looked_up_format = registry.get(network_name)
1184
self.assertEqual(format.__class__, looked_up_format.__class__)
1185
# The network name must be a byte string.
1186
self.assertIsInstance(network_name, str)
1168
1188
def test_open_not_bzrdir(self):
1169
1189
# test the formats specific behaviour for no-content or similar dirs.
1170
1190
self.assertRaises(NotBranchError,