496
496
def test_parent_is_missing(self):
497
497
inv = self.get_empty_inventory()
498
file2 = inventory.InventoryFile(b'id2', 'path2', 'missingparent')
498
file2 = inventory.InventoryFile(b'id2', 'path2', b'missingparent')
499
499
file2.revision = b'result'
500
500
file2.text_size = 0
501
501
file2.text_sha1 = b""
1103
1103
def test_create_by_apply_delta_sets_root(self):
1104
1104
inv = Inventory()
1105
inv.root.revision = b"myrootrev"
1105
1106
inv.revision_id = b"revid"
1106
1107
chk_bytes = self.get_chk_bytes()
1107
1108
base_inv = CHKInventory.from_inventory(chk_bytes, inv)
1108
1109
inv.add_path("", "directory", b"myrootid", None)
1109
inv.revision_id = "expectedid"
1110
inv.revision_id = b"expectedid"
1111
inv.root.revision = b"myrootrev"
1110
1112
reference_inv = CHKInventory.from_inventory(chk_bytes, inv)
1111
1113
delta = [("", None, base_inv.root.file_id, None),
1112
1114
(None, "", b"myrootid", inv.root)]
1331
1333
inv.get_entry(b"fileid").text_sha1 = b"ffff"
1332
1334
inv.get_entry(b"fileid").text_size = 0
1333
1335
inv.add(InventoryDirectory(b"dirid", u'dir-\N{EURO SIGN}', root_id))
1336
inv.get_entry(b"dirid").revision = b"dirrev"
1334
1337
inv.add(InventoryFile(b"childid", u'ch\xefld', b"dirid"))
1335
1338
inv.get_entry(b"childid").revision = b"filerev"
1336
1339
inv.get_entry(b"childid").text_sha1 = b"ffff"
1365
1368
inv.get_entry(b"fileid").text_sha1 = b"ffff"
1366
1369
inv.get_entry(b"fileid").text_size = 1
1367
1370
inv.add(InventoryDirectory(b"dirid", "dir", root_id))
1371
inv.get_entry(b"dirid").revision = b"dirrev"
1368
1372
inv.add(InventoryFile(b"childid", "child", b"dirid"))
1369
1373
inv.get_entry(b"childid").revision = b"filerev"
1370
1374
inv.get_entry(b"childid").executable = False
1383
1387
self.assertTrue(new_inv._fully_cached)
1384
1388
ie_root = new_inv._fileid_to_entry_cache[root_id]
1385
1389
self.assertEqual(['dir', 'file'], sorted(ie_root._children.keys()))
1386
ie_dir = new_inv._fileid_to_entry_cache['dirid']
1390
ie_dir = new_inv._fileid_to_entry_cache[b'dirid']
1387
1391
self.assertEqual(['child'], sorted(ie_dir._children.keys()))
1389
1393
def test__preload_handles_partially_evaluated_inventory(self):
1406
1410
def test_filter_change_in_renamed_subfolder(self):
1407
1411
inv = Inventory(b'tree-root')
1412
inv.root.revision = b'rootrev'
1408
1413
src_ie = inv.add_path('src', 'directory', b'src-id')
1409
inv.add_path('src/sub/', 'directory', b'sub-id')
1414
src_ie.revision = b'srcrev'
1415
sub_ie = inv.add_path('src/sub/', 'directory', b'sub-id')
1416
sub_ie.revision = b'subrev'
1410
1417
a_ie = inv.add_path('src/sub/a', 'file', b'a-id')
1418
a_ie.revision = b'filerev'
1411
1419
a_ie.text_sha1 = osutils.sha_string(b'content\n')
1412
1420
a_ie.text_size = len(b'content\n')
1413
1421
chk_bytes = self.get_chk_bytes()
1431
1439
trans = self.get_transport('')
1432
1440
return factory(trans)
1434
def make_dir(self, inv, name, parent_id):
1435
inv.add(inv.make_entry('directory', name, parent_id, name.encode('utf-8') + b'-id'))
1442
def make_dir(self, inv, name, parent_id, revision):
1443
ie = inv.make_entry('directory', name, parent_id, name.encode('utf-8') + b'-id')
1444
ie.revision = revision
1437
def make_file(self, inv, name, parent_id, content=b'content\n'):
1447
def make_file(self, inv, name, parent_id, revision, content=b'content\n'):
1438
1448
ie = inv.make_entry('file', name, parent_id, name.encode('utf-8') + b'-id')
1439
1449
ie.text_sha1 = osutils.sha_string(content)
1440
1450
ie.text_size = len(content)
1451
ie.revision = revision
1443
1454
def make_simple_inventory(self):
1453
1464
# dir2/ dir2-id
1454
1465
# sub2-file1 sub2-file1-id
1456
self.make_dir(inv, 'dir1', b'TREE_ROOT')
1457
self.make_dir(inv, 'dir2', b'TREE_ROOT')
1458
self.make_dir(inv, 'sub-dir1', b'dir1-id')
1459
self.make_file(inv, 'top', b'TREE_ROOT')
1460
self.make_file(inv, 'sub-file1', b'dir1-id')
1461
self.make_file(inv, 'sub-file2', b'dir1-id')
1462
self.make_file(inv, 'subsub-file1', b'sub-dir1-id')
1463
self.make_file(inv, 'sub2-file1', b'dir2-id')
1467
self.make_dir(inv, 'dir1', b'TREE_ROOT', b'dirrev')
1468
self.make_dir(inv, 'dir2', b'TREE_ROOT', b'dirrev')
1469
self.make_dir(inv, 'sub-dir1', b'dir1-id', b'dirrev')
1470
self.make_file(inv, 'top', b'TREE_ROOT', b'filerev')
1471
self.make_file(inv, 'sub-file1', b'dir1-id', b'filerev')
1472
self.make_file(inv, 'sub-file2', b'dir1-id', b'filerev')
1473
self.make_file(inv, 'subsub-file1', b'sub-dir1-id', b'filerev')
1474
self.make_file(inv, 'sub2-file1', b'dir2-id', b'filerev')
1464
1475
chk_bytes = self.get_chk_bytes()
1465
1476
# use a small maximum_size to force internal paging structures
1466
1477
chk_inv = CHKInventory.from_inventory(chk_bytes, inv,
1482
1493
for entry in entries:
1483
1494
s = expected_children.setdefault(entry.parent_id, [])
1484
1495
s.append(entry.file_id)
1485
val_children = dict((k, sorted(v)) for k, v
1486
in val_children.items())
1487
expected_children = dict((k, sorted(v)) for k, v
1488
in expected_children.items())
1497
k: sorted(v) for k, v in val_children.items()}
1498
expected_children = {
1499
k: sorted(v) for k, v in expected_children.items()}
1489
1500
self.assertEqual(expected_children, val_children)
1491
1502
def test_make_simple_inventory(self):
1522
1533
def test_single_file(self):
1523
1534
inv = self.make_simple_inventory()
1524
self.assertExpand([b'TREE_ROOT', b'top-id'], inv, ['top-id'])
1535
self.assertExpand([b'TREE_ROOT', b'top-id'], inv, [b'top-id'])
1526
1537
def test_get_all_parents(self):
1527
1538
inv = self.make_simple_inventory()
1544
1555
def test_top_level_file(self):
1545
1556
inv = self.make_simple_inventory()
1546
self.assertExpand([b'TREE_ROOT', b'top-id'], inv, ['top-id'])
1557
self.assertExpand([b'TREE_ROOT', b'top-id'], inv, [b'top-id'])
1548
1559
def test_subsub_file(self):
1549
1560
inv = self.make_simple_inventory()
1553
1564
def test_sub_and_root(self):
1554
1565
inv = self.make_simple_inventory()
1555
1566
self.assertExpand([b'TREE_ROOT', b'dir1-id', b'sub-dir1-id', b'top-id',
1556
b'subsub-file1-id'], inv, ['top-id', b'subsub-file1-id'])
1567
b'subsub-file1-id'], inv, [b'top-id', b'subsub-file1-id'])
1559
1570
class TestMutableInventoryFromTree(TestCaseWithTransport):