170
170
self.assertIsInstance(repo.texts,
171
171
versionedfile.VersionedFiles)
173
def test_exposed_versioned_files_are_marked_dirty(self):
174
repo = self.make_repository('.')
176
signatures = repo.signatures
177
revisions = repo.revisions
178
inventories = repo.inventories
180
self.assertRaises(errors.ObjectNotLocked,
182
self.assertRaises(errors.ObjectNotLocked,
184
self.assertRaises(errors.ObjectNotLocked,
186
self.assertRaises(errors.ObjectNotLocked,
187
signatures.add_lines, ('foo',), [], [])
188
self.assertRaises(errors.ObjectNotLocked,
189
revisions.add_lines, ('foo',), [], [])
190
self.assertRaises(errors.ObjectNotLocked,
191
inventories.add_lines, ('foo',), [], [])
193
173
def test_clone_to_default_format(self):
194
174
#TODO: Test that cloning a repository preserves all the information
195
175
# such as signatures[not tested yet] etc etc.
1083
1063
self.assertThat(repo.lock_write, ReturnsUnlockable(repo))
1086
class TestCaseWithComplexRepository(per_repository.TestCaseWithRepository):
1089
super(TestCaseWithComplexRepository, self).setUp()
1090
tree_a = self.make_branch_and_tree('a')
1091
self.bzrdir = tree_a.branch.bzrdir
1092
# add a corrupt inventory 'orphan'
1093
# this may need some generalising for knits.
1096
tree_a.branch.repository.start_write_group()
1098
inv_file = tree_a.branch.repository.inventories
1099
inv_file.add_lines(('orphan',), [], [])
1101
tree_a.branch.repository.commit_write_group()
1104
tree_a.branch.repository.abort_write_group()
1107
# add a real revision 'rev1'
1108
tree_a.commit('rev1', rev_id='rev1', allow_pointless=True)
1109
# add a real revision 'rev2' based on rev1
1110
tree_a.commit('rev2', rev_id='rev2', allow_pointless=True)
1111
# add a reference to a ghost
1112
tree_a.add_parent_tree_id('ghost1')
1114
tree_a.commit('rev3', rev_id='rev3', allow_pointless=True)
1115
except errors.RevisionNotPresent:
1116
raise tests.TestNotApplicable(
1117
"Cannot test with ghosts for this format.")
1118
# add another reference to a ghost, and a second ghost.
1119
tree_a.add_parent_tree_id('ghost1')
1120
tree_a.add_parent_tree_id('ghost2')
1121
tree_a.commit('rev4', rev_id='rev4', allow_pointless=True)
1123
def test_revision_trees(self):
1124
revision_ids = ['rev1', 'rev2', 'rev3', 'rev4']
1125
repository = self.bzrdir.open_repository()
1126
repository.lock_read()
1127
self.addCleanup(repository.unlock)
1128
trees1 = list(repository.revision_trees(revision_ids))
1129
trees2 = [repository.revision_tree(t) for t in revision_ids]
1130
self.assertEqual(len(trees1), len(trees2))
1131
for tree1, tree2 in zip(trees1, trees2):
1132
self.assertFalse(tree2.changes_from(tree1).has_changed())
1134
def test_get_deltas_for_revisions(self):
1135
repository = self.bzrdir.open_repository()
1136
repository.lock_read()
1137
self.addCleanup(repository.unlock)
1138
revisions = [repository.get_revision(r) for r in
1139
['rev1', 'rev2', 'rev3', 'rev4']]
1140
deltas1 = list(repository.get_deltas_for_revisions(revisions))
1141
deltas2 = [repository.get_revision_delta(r.revision_id) for r in
1143
self.assertEqual(deltas1, deltas2)
1145
def test_all_revision_ids(self):
1146
# all_revision_ids -> all revisions
1147
self.assertEqual(set(['rev1', 'rev2', 'rev3', 'rev4']),
1148
set(self.bzrdir.open_repository().all_revision_ids()))
1150
def test_get_ancestry_missing_revision(self):
1151
# get_ancestry(revision that is in some data but not fully installed
1153
self.assertRaises(errors.NoSuchRevision,
1154
self.bzrdir.open_repository().get_ancestry, 'orphan')
1156
def test_get_unordered_ancestry(self):
1157
repo = self.bzrdir.open_repository()
1158
self.assertEqual(set(repo.get_ancestry('rev3')),
1159
set(repo.get_ancestry('rev3', topo_sorted=False)))
1161
def test_reserved_id(self):
1162
repo = self.make_repository('repository')
1164
repo.start_write_group()
1166
self.assertRaises(errors.ReservedId, repo.add_inventory, 'reserved:',
1168
self.assertRaises(errors.ReservedId, repo.add_inventory_by_delta,
1169
"foo", [], 'reserved:', None)
1170
self.assertRaises(errors.ReservedId, repo.add_revision, 'reserved:',
1173
repo.abort_write_group()
1177
1066
class TestCaseWithCorruptRepository(per_repository.TestCaseWithRepository):
1179
1068
def setUp(self):