988
988
self.tree1 = self.make_branch_and_tree('b1')
989
989
self.b1 = self.tree1.branch
990
990
self.tree1.commit('message', rev_id=b'rev2a')
991
bundle = self.get_valid_bundle('null:', 'rev2a')
991
bundle = self.get_valid_bundle(b'null:', b'rev2a')
992
992
branch2 = self.make_branch('b2')
993
self.assertFalse(branch2.repository.has_revision('rev2a'))
993
self.assertFalse(branch2.repository.has_revision(b'rev2a'))
994
994
target_revision = bundle.install_revisions(branch2.repository)
995
self.assertTrue(branch2.repository.has_revision('rev2a'))
996
self.assertEqual('rev2a', target_revision)
995
self.assertTrue(branch2.repository.has_revision(b'rev2a'))
996
self.assertEqual(b'rev2a', target_revision)
998
998
def test_bundle_empty_property(self):
999
999
"""Test serializing revision properties with an empty value."""
1000
1000
tree = self.make_branch_and_memory_tree('tree')
1001
1001
tree.lock_write()
1002
1002
self.addCleanup(tree.unlock)
1003
tree.add([''], ['TREE_ROOT'])
1003
tree.add([''], [b'TREE_ROOT'])
1004
1004
tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id=b'rev1')
1005
1005
self.b1 = tree.branch
1006
bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1006
bundle_sio, revision_ids = self.create_bundle_text(b'null:', b'rev1')
1007
1007
bundle = read_bundle(bundle_sio)
1008
1008
revision_info = bundle.revisions[0]
1009
self.assertEqual('rev1', revision_info.revision_id)
1009
self.assertEqual(b'rev1', revision_info.revision_id)
1010
1010
rev = revision_info.as_revision()
1011
1011
self.assertEqual({'branch-nick':'tree', 'empty':'', 'one':'two'},
1012
1012
rev.properties)
1085
1085
tree = self.make_simple_tree('knit')
1086
1086
tree.commit('hello', rev_id=b'rev1')
1087
1087
tree.commit('hello', rev_id=b'rev2')
1088
bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1088
bundle = read_bundle(self.create_bundle_text(b'null:', b'rev2')[0])
1089
1089
repo = self.make_repository('repo', format='dirstate-with-subtree')
1090
1090
bundle.install_revisions(repo)
1093
1093
def test_across_models(self):
1094
1094
repo = self.make_repo_with_installed_revisions()
1095
inv = repo.get_inventory('rev2')
1096
self.assertEqual('rev2', inv.root.revision)
1095
inv = repo.get_inventory(b'rev2')
1096
self.assertEqual(b'rev2', inv.root.revision)
1097
1097
root_id = inv.root.file_id
1098
1098
repo.lock_read()
1099
1099
self.addCleanup(repo.unlock)
1100
self.assertEqual({(root_id, 'rev1'):(),
1101
(root_id, 'rev2'):((root_id, 'rev1'),)},
1102
repo.texts.get_parent_map([(root_id, 'rev1'), (root_id, 'rev2')]))
1100
self.assertEqual({(root_id, b'rev1'):(),
1101
(root_id, b'rev2'):((root_id, b'rev1'),)},
1102
repo.texts.get_parent_map([(root_id, b'rev1'), (root_id, b'rev2')]))
1104
1104
def test_inv_hash_across_serializers(self):
1105
1105
repo = self.make_repo_with_installed_revisions()
1106
recorded_inv_sha1 = repo.get_revision('rev2').inventory_sha1
1107
xml = repo._get_inventory_xml('rev2')
1106
recorded_inv_sha1 = repo.get_revision(b'rev2').inventory_sha1
1107
xml = repo._get_inventory_xml(b'rev2')
1108
1108
self.assertEqual(osutils.sha_string(xml), recorded_inv_sha1)
1110
1110
def test_across_models_incompatible(self):
1404
1404
def test_creation(self):
1405
1405
tree = self.make_branch_and_tree('tree')
1406
1406
self.build_tree_contents([('tree/file', b'contents1\nstatic\n')])
1407
tree.add('file', 'fileid-2')
1407
tree.add('file', b'fileid-2')
1408
1408
tree.commit('added file', rev_id=b'rev1')
1409
1409
self.build_tree_contents([('tree/file', b'contents2\nstatic\n')])
1410
1410
tree.commit('changed file', rev_id=b'rev2')
1412
1412
serializer = BundleSerializerV4('1.0')
1413
serializer.write(tree.branch.repository, ['rev1', 'rev2'], {}, s)
1413
serializer.write(tree.branch.repository, [b'rev1', b'rev2'], {}, s)
1415
1415
tree2 = self.make_branch_and_tree('target')
1416
1416
target_repo = tree2.branch.repository
1420
1420
# Turn the 'iterators_of_bytes' back into simple strings for comparison
1421
1421
repo_texts = dict((i, ''.join(content)) for i, content
1422
1422
in target_repo.iter_files_bytes(
1423
[('fileid-2', 'rev1', '1'),
1424
('fileid-2', 'rev2', '2')]))
1425
self.assertEqual({'1':'contents1\nstatic\n',
1426
'2':'contents2\nstatic\n'},
1423
[(b'fileid-2', b'rev1', '1'),
1424
(b'fileid-2', b'rev2', '2')]))
1425
self.assertEqual({'1':b'contents1\nstatic\n',
1426
'2':b'contents2\nstatic\n'},
1428
rtree = target_repo.revision_tree('rev2')
1428
rtree = target_repo.revision_tree(b'rev2')
1429
1429
inventory_vf = target_repo.inventories
1430
1430
# If the inventory store has a graph, it must match the revision graph.
1431
1431
self.assertSubset(
1432
[inventory_vf.get_parent_map([('rev2',)])[('rev2',)]],
1433
[None, (('rev1',),)])
1432
[inventory_vf.get_parent_map([(b'rev2',)])[(b'rev2',)]],
1433
[None, ((b'rev1',),)])
1434
1434
self.assertEqual('changed file',
1435
target_repo.get_revision('rev2').message)
1435
target_repo.get_revision(b'rev2').message)
1438
1438
def get_raw(bundle_file):
1515
1515
builder.build_snapshot(None, [
1516
1516
('add', ('', 'root-id', 'directory', None)),
1517
1517
('add', ('file', 'file-id', 'file', 'original content\n')),
1518
], revision_id='a@cset-0-1')
1518
], revision_id=b'a@cset-0-1')
1519
1519
builder.build_snapshot(['a@cset-0-1'], [
1520
1520
('modify', ('file', 'new-content\n')),
1521
], revision_id='a@cset-0-2a')
1521
], revision_id=b'a@cset-0-2a')
1522
1522
builder.build_snapshot(['a@cset-0-1'], [
1523
1523
('add', ('other-file', 'file2-id', 'file', 'file2-content\n')),
1524
], revision_id='a@cset-0-2b')
1524
], revision_id=b'a@cset-0-2b')
1525
1525
builder.build_snapshot(['a@cset-0-2a', 'a@cset-0-2b'], [
1526
1526
('add', ('other-file', 'file2-id', 'file', 'file2-content\n')),
1527
], revision_id='a@cset-0-3')
1527
], revision_id=b'a@cset-0-3')
1528
1528
builder.finish_series()
1529
1529
self.b1 = builder.get_branch()
1530
1530
self.b1.lock_read()
1657
1657
def test_creating_bundle_preserves_chk_pages(self):
1658
1658
self.make_merged_branch()
1659
1659
target = self.b1.controldir.sprout('target',
1660
revision_id='a@cset-0-2a').open_branch()
1660
revision_id=b'a@cset-0-2a').open_branch()
1661
1661
bundle_txt, rev_ids = self.create_bundle_text('a@cset-0-2a',
1663
1663
self.assertEqual(['a@cset-0-2b', 'a@cset-0-3'], rev_ids)