169
169
self.assertEqual(btree.path2id("grandparent/parent"), "b")
170
170
self.assertEqual(btree.path2id("grandparent/parent/file"), "c")
172
assert btree.path2id("grandparent2") is None
173
assert btree.path2id("grandparent2/parent") is None
174
assert btree.path2id("grandparent2/parent/file") is None
172
self.assertTrue(btree.path2id("grandparent2") is None)
173
self.assertTrue(btree.path2id("grandparent2/parent") is None)
174
self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
176
176
btree.note_rename("grandparent", "grandparent2")
177
assert btree.old_path("grandparent") is None
178
assert btree.old_path("grandparent/parent") is None
179
assert btree.old_path("grandparent/parent/file") is None
177
self.assertTrue(btree.old_path("grandparent") is None)
178
self.assertTrue(btree.old_path("grandparent/parent") is None)
179
self.assertTrue(btree.old_path("grandparent/parent/file") is None)
181
181
self.assertEqual(btree.id2path("a"), "grandparent2")
182
182
self.assertEqual(btree.id2path("b"), "grandparent2/parent")
186
186
self.assertEqual(btree.path2id("grandparent2/parent"), "b")
187
187
self.assertEqual(btree.path2id("grandparent2/parent/file"), "c")
189
assert btree.path2id("grandparent") is None
190
assert btree.path2id("grandparent/parent") is None
191
assert btree.path2id("grandparent/parent/file") is None
189
self.assertTrue(btree.path2id("grandparent") is None)
190
self.assertTrue(btree.path2id("grandparent/parent") is None)
191
self.assertTrue(btree.path2id("grandparent/parent/file") is None)
193
193
btree.note_rename("grandparent/parent", "grandparent2/parent2")
194
194
self.assertEqual(btree.id2path("a"), "grandparent2")
199
199
self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
200
200
self.assertEqual(btree.path2id("grandparent2/parent2/file"), "c")
202
assert btree.path2id("grandparent2/parent") is None
203
assert btree.path2id("grandparent2/parent/file") is None
202
self.assertTrue(btree.path2id("grandparent2/parent") is None)
203
self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
205
205
btree.note_rename("grandparent/parent/file",
206
206
"grandparent2/parent2/file2")
212
212
self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
213
213
self.assertEqual(btree.path2id("grandparent2/parent2/file2"), "c")
215
assert btree.path2id("grandparent2/parent2/file") is None
215
self.assertTrue(btree.path2id("grandparent2/parent2/file") is None)
217
217
def test_moves(self):
218
218
"""Ensure that file moves have the proper effect on children"""
221
221
"grandparent/alt_parent/file")
222
222
self.assertEqual(btree.id2path("c"), "grandparent/alt_parent/file")
223
223
self.assertEqual(btree.path2id("grandparent/alt_parent/file"), "c")
224
assert btree.path2id("grandparent/parent/file") is None
224
self.assertTrue(btree.path2id("grandparent/parent/file") is None)
226
226
def unified_diff(self, old, new):
233
233
btree = self.make_tree_1()[0]
234
234
btree.note_rename("grandparent/parent/file",
235
235
"grandparent/alt_parent/file")
236
assert btree.id2path("e") is None
237
assert btree.path2id("grandparent/parent/file") is None
236
self.assertTrue(btree.id2path("e") is None)
237
self.assertTrue(btree.path2id("grandparent/parent/file") is None)
238
238
btree.note_id("e", "grandparent/parent/file")
298
298
btree = self.make_tree_1()[0]
299
299
self.assertEqual(btree.get_file("c").read(), "Hello\n")
300
300
btree.note_deletion("grandparent/parent/file")
301
assert btree.id2path("c") is None
302
assert btree.path2id("grandparent/parent/file") is None
301
self.assertTrue(btree.id2path("c") is None)
302
self.assertTrue(btree.path2id("grandparent/parent/file") is None)
304
304
def sorted_ids(self, tree):
464
464
ancestors = write_bundle(self.b1.repository, rev_id, 'null:', s,
465
465
format=self.format)
467
assert isinstance(s.getvalue(), str), (
468
"Bundle isn't a bytestring:\n %s..." % repr(s.getvalue())[:40])
467
self.assertIsInstance(s.getvalue(), str)
469
468
install_bundle(tree.branch.repository, read_bundle(s))
470
469
for ancestor in ancestors:
471
470
old = self.b1.repository.revision_tree(ancestor)
472
471
new = tree.branch.repository.revision_tree(ancestor)
474
# Check that there aren't any inventory level changes
475
delta = new.changes_from(old)
476
self.assertFalse(delta.has_changed(),
477
'Revision %s not copied correctly.'
480
# Now check that the file contents are all correct
481
for inventory_id in old:
483
old_file = old.get_file(inventory_id)
488
self.assertEqual(old_file.read(),
489
new.get_file(inventory_id).read())
475
# Check that there aren't any inventory level changes
476
delta = new.changes_from(old)
477
self.assertFalse(delta.has_changed(),
478
'Revision %s not copied correctly.'
481
# Now check that the file contents are all correct
482
for inventory_id in old:
484
old_file = old.get_file(inventory_id)
489
self.assertEqual(old_file.read(),
490
new.get_file(inventory_id).read())
490
494
if not _mod_revision.is_null(rev_id):
491
495
rh = self.b1.revision_history()
492
496
tree.branch.set_revision_history(rh[:rh.index(rev_id)+1])
1015
1019
self.assertNotContainsRe(inv_text, 'format="5"')
1016
1020
self.assertContainsRe(inv_text, 'format="7"')
1022
def make_repo_with_installed_revisions(self):
1023
tree = self.make_simple_tree('knit')
1024
tree.commit('hello', rev_id='rev1')
1025
tree.commit('hello', rev_id='rev2')
1026
bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1027
repo = self.make_repository('repo', format='dirstate-with-subtree')
1028
bundle.install_revisions(repo)
1018
1031
def test_across_models(self):
1019
tree = self.make_simple_tree('knit')
1020
tree.commit('hello', rev_id='rev1')
1021
tree.commit('hello', rev_id='rev2')
1022
bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1023
repo = self.make_repository('repo', format='dirstate-with-subtree')
1024
bundle.install_revisions(repo)
1032
repo = self.make_repo_with_installed_revisions()
1025
1033
inv = repo.get_inventory('rev2')
1026
1034
self.assertEqual('rev2', inv.root.revision)
1027
root_vf = repo.weave_store.get_weave(inv.root.file_id,
1028
repo.get_transaction())
1029
self.assertEqual(root_vf.versions(), ['rev1', 'rev2'])
1035
root_id = inv.root.file_id
1037
self.addCleanup(repo.unlock)
1038
self.assertEqual({(root_id, 'rev1'):(),
1039
(root_id, 'rev2'):((root_id, 'rev1'),)},
1040
repo.texts.get_parent_map([(root_id, 'rev1'), (root_id, 'rev2')]))
1042
def test_inv_hash_across_serializers(self):
1043
repo = self.make_repo_with_installed_revisions()
1044
recorded_inv_sha1 = repo.get_inventory_sha1('rev2')
1045
xml = repo.get_inventory_xml('rev2')
1046
self.assertEqual(sha_string(xml), recorded_inv_sha1)
1031
1048
def test_across_models_incompatible(self):
1032
1049
tree = self.make_simple_tree('dirstate-with-subtree')
1336
1353
tree2 = self.make_branch_and_tree('target')
1337
1354
target_repo = tree2.branch.repository
1338
1355
install_bundle(target_repo, serializer.read(s))
1339
vf = target_repo.weave_store.get_weave('fileid-2',
1340
target_repo.get_transaction())
1341
self.assertEqual('contents1\nstatic\n', vf.get_text('rev1'))
1342
self.assertEqual('contents2\nstatic\n', vf.get_text('rev2'))
1356
target_repo.lock_read()
1357
self.addCleanup(target_repo.unlock)
1358
self.assertEqual({'1':'contents1\nstatic\n',
1359
'2':'contents2\nstatic\n'},
1360
dict(target_repo.iter_files_bytes(
1361
[('fileid-2', 'rev1', '1'), ('fileid-2', 'rev2', '2')])))
1343
1362
rtree = target_repo.revision_tree('rev2')
1344
inventory_vf = target_repo.get_inventory_weave()
1345
self.assertEqual({'rev2':('rev1',)},
1346
inventory_vf.get_parent_map(['rev2']))
1363
inventory_vf = target_repo.inventories
1364
# If the inventory store has a graph, it must match the revision graph.
1366
[inventory_vf.get_parent_map([('rev2',)])[('rev2',)]],
1367
[None, (('rev1',),)])
1347
1368
self.assertEqual('changed file',
1348
1369
target_repo.get_revision('rev2').message)